Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(9)
承蒙各位厚愛,我們一起每天進(jìn)步一點(diǎn)點(diǎn)?。ㄊ髽?biāo)選中空白處查看答案)
1、“先進(jìn)先出”的容器是:( )
正確答案: B
堆棧(Stack)
隊(duì)列(Queue)
字符串(String)
迭代器(Iterator)
題解:
堆棧:先進(jìn)后出
隊(duì)列:先進(jìn)先出
2、不考慮反射機(jī)制,一個子類顯式調(diào)用父類的構(gòu)造器必須用super關(guān)鍵字。( )
正確答案: A
正確
錯誤
題解:
java中的super關(guān)鍵詞
super用于代表子類的直接父類的特征
super可以訪問:
父類的成員變量,成員方法,構(gòu)造方法
使用super關(guān)鍵詞的情況:
在子類中,存在與父類相同的屬性和方法,由于訪問子類中屬性和方法的優(yōu)先級高于父類,可以通過super關(guān)鍵詞來訪問父類中的屬性和方法
在子類中,可以通過super關(guān)鍵詞來顯示的調(diào)用父類的構(gòu)造方法
子類的構(gòu)造方法默認(rèn)調(diào)用父類的無參構(gòu)造方法,當(dāng)父類中不存在無參構(gòu)造方法時,可以通過super來調(diào)用父類的有參構(gòu)造芳法來避免編譯時錯誤。
3、以下是java concurrent包下的4個類,選出差別最大的一個
正確答案: C
Semaphore
ReentrantLock
Future
CountDownLatch
題解:
A、Semaphore:類,控制某個資源可被同時訪問的個數(shù);
B、ReentrantLock:類,具有與使用synchronized方法和語句所訪問的隱式監(jiān)視器鎖相同的一些基本行為和語義,但功能更強(qiáng)大;
C、 Future:接口,表示異步計算的結(jié)果;
D、 CountDownLatch: 類,可以用來在一個線程中等待多個線程完成任務(wù)的類。
4、判斷對錯。在java的多態(tài)調(diào)用中,new的是哪一個類就是調(diào)用的哪個類的方法。
正確答案: B
對
錯
題解:
java多態(tài)有兩種情況:重載和覆寫
在覆寫中,運(yùn)用的是動態(tài)單分配,是根據(jù)new的類型確定對象,從而確定調(diào)用的方法;
在重載中,運(yùn)用的是靜態(tài)多分派,即根據(jù)靜態(tài)類型確定對象,因此不是根據(jù)new的類型確定調(diào)用的方法
5、下面屬于java引用類型的有?
正確答案: A D
String
byte
char
Array
題解:
首先說一下,A選項(xiàng)的String應(yīng)該首字母大寫,小寫是錯的
java中除了基本數(shù)據(jù)類型都是引用數(shù)據(jù)類型
java中的基本數(shù)據(jù)類型如下
byte
shot
int
long
float
double
char
boolean
除此之外都是引用類型
6、有以下程序段, 則下面正確的選項(xiàng)是()
public class MyThead extends Thread{ public static void main(String[] args) { MyThead t=new MyThead(); MyThead s=new MyThead(); t.start(); System.out.println("one."); s.start(); System.out.println("two."); } public void run() { System.out.println("Thread"); } }
正確答案: B C D
A:編譯失敗
B:程序運(yùn)行可能結(jié)果為:
one.
Thread
two.
Thread
C:程序運(yùn)行可能結(jié)果是:
one.
two.
Thread
Thread
D:程序運(yùn)行結(jié)果不穩(wěn)定
題解:
start()是開啟線程,等待獲得時間片,一到獲得時間片就執(zhí)行。所以可能一開啟就獲得了時間片執(zhí)行,也有可能等到two輸出后才獲得了時間片。所以BC都可能,所以D也正確。
7、往OuterClass類的代碼段中插入內(nèi)部類聲明, 哪一個是錯誤的:
public class OuterClass{
private float f=1.0f;
//插入代碼到這里
}
正確答案: A B C D
A:class InnerClass{
public static float func(){return f;}
}
B:abstract class InnerClass{
public abstract float func(){}
}
C:static class InnerClass{
protected static float func(){return f;}
}
D:public class InnerClass{
static float func(){return f;}
}
題解:
主要考核了這幾個知識點(diǎn):
1.靜態(tài)內(nèi)部類才可以聲明靜態(tài)方法
2.靜態(tài)方法不可以使用非靜態(tài)變量
3.抽象方法不可以有函數(shù)體
靜態(tài)方法不能訪問非靜態(tài)變量,A和C錯;
抽象類中的抽象方法不能有方法體,B錯;
一個類中有多個類聲明時,只能有一個public類,D錯
8、Java.Thread的方法resume()負(fù)責(zé)重新開始被以下哪個方法中斷的線程的執(zhí)行()。
正確答案: D
stop
sleep
wait
suspend
題解:
這道題太老了,suspend 和 resume 從 1.2 就棄用了。
suspend() 和 resume() 方法:兩個方法配套使用,suspend()使得線程進(jìn)入阻塞狀態(tài),并且不會自動恢復(fù),必須其對應(yīng)的 resume() 被調(diào)用,才能使得線程重新進(jìn)入可執(zhí)行狀態(tài)
線程的五大狀態(tài)及其轉(zhuǎn)換:
resume與suspended一起使用 wait與notify(notifyAll)一起使用 sleep會讓線程暫時不執(zhí)行 suspend() 和 resume() 方法:兩個方法配套使用,suspend()使得線程進(jìn)入阻塞狀態(tài),并且不會自動恢復(fù),必須其對應(yīng)的 resume() 被調(diào)用,才能使得線程重新進(jìn)入可執(zhí)行狀態(tài)。
線程從創(chuàng)建、運(yùn)行到結(jié)束總是處于下面五個狀態(tài)之一:新建狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)及死亡狀態(tài)。
1.新建狀態(tài)(New): 當(dāng)用new操作符創(chuàng)建一個線程時, 例如new Thread ( r),線程還沒有開始運(yùn)行,此時線程處在新建狀態(tài)。 當(dāng)一個線程處于新生狀態(tài)時,程序還沒有開始運(yùn)行線程中的代碼
2.就緒狀態(tài)(Runnable)
一個新創(chuàng)建的線程并不自動開始運(yùn)行,要執(zhí)行線程,必須調(diào)用線程的start()方法。
當(dāng)線程對象調(diào)用start()方法即啟動了線程,start()方法創(chuàng)建線程運(yùn)行的系統(tǒng)資源,
并調(diào)度線程運(yùn)行run()方法。當(dāng)start()方法返回后,線程就處于就緒狀態(tài)。
處于就緒狀態(tài)的線程并不一定立即運(yùn)行run()方法,線程還必須同其他線程競爭CPU
時間,只有獲得CPU時間才可以運(yùn)行線程。因?yàn)樵趩蜟PU的計算機(jī)系統(tǒng)中,不可能
同時運(yùn)行多個線程,一個時刻僅有一個線程處于運(yùn)行狀態(tài)。因此此時可能有多個
線程處于就緒狀態(tài)。對多個處于就緒狀態(tài)的線程是由Java運(yùn)行時系統(tǒng)的線程調(diào)度
程序(thread scheduler)來調(diào)度的。
3.運(yùn)行狀態(tài)(Running)
當(dāng)線程獲得CPU時間后,它才進(jìn)入運(yùn)行狀態(tài),真正開始執(zhí)行run()方法.
4.阻塞狀態(tài)(Blocked)
線程運(yùn)行過程中,可能由于各種原因進(jìn)入阻塞狀態(tài): 1>線程通過調(diào)用sleep方法進(jìn)入睡眠狀態(tài); 2>線程調(diào)用一個在I/O上被阻塞的操作,即該操作在輸入輸出操作完成之前不會返回到它的調(diào)用者; 3>線程試圖得到一個鎖,而該鎖正被其他線程持有; 4>線程在等待某個觸發(fā)條件; …
所謂阻塞狀態(tài)是正在運(yùn)行的線程沒有運(yùn)行結(jié)束,暫時讓出CPU,這時其他處于就緒狀態(tài)的線程就可以獲得CPU時間, 進(jìn)入運(yùn)行狀態(tài)。
5.死亡狀態(tài)(Dead)
有兩個原因會導(dǎo)致線程死亡:
run方法正常退出而自然死亡,
一個未捕獲的異常終止了run方法而使線程猝死。 為了確定線程在當(dāng)前是否存活著(就是要么是可運(yùn)行的,要么是被阻塞了),需要使用isAlive方法。如果是 可運(yùn)行或被阻塞,這個方法返回true; 如果線程仍舊是new狀態(tài)且不是可運(yùn)行的, 或者線程死亡了, 則返回false.
9、下面關(guān)于面向?qū)ο蟮囊恍├斫饽男┦清e誤的( )
正確答案: C
A:面向?qū)ο蟮淖钪匾奶匦允侵С掷^承、封裝和多態(tài)
B:系統(tǒng)設(shè)計應(yīng)該遵循開閉原則,系統(tǒng)應(yīng)該穩(wěn)定不不可修改,但應(yīng)支持通過繼承、組合等方式進(jìn)行擴(kuò)展
C:函數(shù)式的語言必然是面向?qū)ο蟮恼Z言
D:面向?qū)ο笤O(shè)計時,每個類的職責(zé)應(yīng)該單一,不要再一個類中引入過多的接口
E:過程式語言和面向?qū)ο蟮恼Z言各有其優(yōu)勢,過程式語言更加靈活,面向?qū)ο笳Z言更加強(qiáng)調(diào)抽象和封裝
F:Java和C++都是靜態(tài)類型的面向?qū)ο缶幊陶Z言
題解:
C語言不是面向?qū)ο?,但是函?shù)式。
10、jvm中垃圾回收分為scanvenge gc和full GC,其中full GC觸發(fā)的條件可能有哪些
正確答案: C D E
A:??臻g滿
B:年輕代空間滿
C:老年代滿
D:持久代滿
E:System.gc()
題解:
Full GC是對整個堆進(jìn)行整理,包括新生代、舊生代和持久代,速度比Scavenge GC慢,觸發(fā)的條件有:
(1)舊生代(老年代)被寫滿
(2)持久代被寫滿
(3)System.gc()
(4)上一次GC之后Heap的各域分配策略動態(tài)變化
答案匯總:
1、正確答案: B
2、正確答案: A
3、正確答案: C
4、正確答案: B
5、正確答案: A D
6、正確答案: B C D
7、正確答案: A B C D
8、正確答案: D
9、正確答案: C
10、正確答案: C D E
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot項(xiàng)目啟動后再請求遠(yuǎn)程接口的解決方式
Spring?Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計目的是用來簡化Spring應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等,這篇文章主要介紹了SpringBoot項(xiàng)目啟動后再請求遠(yuǎn)程接口的實(shí)現(xiàn)方式?,需要的朋友可以參考下2023-02-02IDEA搭建Maven模塊化項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了IDEA搭建Maven模塊化項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05