Java日常練習題,每天進步一點點(24)
1、Java 語言中創建一個對象使用的關鍵字是()
正確答案: C
class
interface
new
create
題解:
送分題,程序員沒有對象就new一個
2、創建一個標識有“關閉”標簽的語句是 ( ) 。
正確答案: B
TextField b = new TextField(“關閉”);
Label b = new Label(“關閉”);
Checkbox b = new Checkbox(“關閉”);
Button b = new Button(“關閉”);
題解:
選項A錯誤,創建的是一個初始顯示為“關閉”的文本框
選項B正確,創建的是一個標識有“關閉”的標簽
選項C錯誤,Checkbox為復選框類,隻能設定是否含標簽
選項D錯誤,創建的是一個標記為“關閉”的按鈕
3、When is the text “Hi there”displayed?
public class StaticTest { static { System.out.println(“Hi there”); } public void print() { System.out.println(“Hello”); } public static void main(String args[]) { StaticTest st1 = new StaticTest(); st1.print(); StaticTest st2 = new StaticTest(); st2.print(); } }
正確答案: C
Never.
Each time a new object of type StaticTest is created.
Once when the class is loaded into the Java virtual machine.
Only when the main() method is executed.
翻譯:
“Hi there”是什麼時候顯示的?
從來沒有。
每次創建StaticTest類型的新對象時。
當類加載到Java虛擬機時。
僅當main()方法被執行時
題解:
類中靜態語句塊僅在類加載時被執行一次
4、下列哪個說法是正確的()
正確答案: D
ConcurrentHashMap使用synchronized關鍵字保證線程安全
HashMap實現瞭Collction接口
Array.asList方法返回java.util.ArrayList對象
SimpleDateFormat是線程不安全的
題解:
A. JDK1.8 的 ConcurrentHashMap 采用CAS+Synchronized保證線程安全。數據結構跟 jdk1.8 中 HashMap 結構類似,都是數組 + 鏈表(當鏈表長度大於 8 時,鏈表結構轉為紅黑二叉樹)結構。 JDK1.7 及以前采用segment的分段鎖機制實現線程安全,其中segment繼承自ReentrantLock,因此采用Lock鎖來保證線程安全。
B.
C.Arrays.asList() 返回 java.util.Arrays.ArrayList 對象,這裡的 ArrayList 是 Arrays 私有的內部類
D.
5、給出以下代碼,請給出結果.
class Two{ Byte x; } class PassO{ public static void main(String[] args){ PassO p=new PassO(); p.start(); } void start(){ Two t=new Two(); System.out.print(t.x+””); Two t2=fix(t); System.out.print(t.x+” ” +t2.x); } Two fix(Two tt){ tt.x=42; return tt; } }
正確答案: B
null null 42
null 42 42
0 0 42
0 42 42
An exception is thrown at runtime
Compilation
題解:
1.註意第二行代碼,Byte x;Byte是包裝類,不是byte(基本數據類型),因此Byte的默認是null,不是0
2.t是一個引用地址類型,在調用fit(Two tt)函數是,是一個實參到形參的傳值,也就是把t的地址賦值給瞭tt,但是都是指向堆內存中新建的對象,因此當對tt.x和t.x指向是相同的。因此t.x也是42
3.Two t2=fit(t);fit函數返回的還是一個引用地址,這句代碼相當於把t(函數裡面返回的是tt)的地址賦值給瞭t2,因此t2.x也是42
6、給定以下JAVA代碼,這段代碼運行後輸出的結果是()
public class Test { public static int aMethod(int i)throws Exception { try{ return i/10; } catch (Exception ex) { throw new Exception("exception in a aMethod"); }finally{ System.out.printf("finally"); } } public static void main(String[] args){ try { aMethod(0); } catch (Exception ex) { System.out.printf("exception in main"); } System.out.printf("finished"); } }
正確答案: B
exception in main finished
finally finished
exception in main finally
finally exception in main finally
題解:
具體執行過程:
1、先進入main函數,進入try塊調用aMethod(0)方法;
2、執行aMethod()方法的try塊,i/10可以正確執行,故並未拋出異常,catch塊不執行,而需要執行finally(該塊任何時候都要執行),故打印finally;
3、回到main函數,由於aMethod()調用成功,因此main函數的catch塊同樣不執行,順序執行finally塊,打印finished
因此,最終的輸出結果就是:finally finished
7、面有關Java的說法正確的是( )
正確答案: A C D F
A:一個類可以實現多個接口
B:抽象類必須有抽象方法
C:protected成員在子類可見性可以修改
D:通過super可以調用父類構造函數
E:final的成員方法實現中隻能讀取類的成員變量
F:String是不可修改的,且java運行環境中對string對象有一個對象池保存
題解:
A對:java類單繼承,多實現
B錯:被abstract修飾的類就是抽象類,有沒有抽象方法無所謂
C錯:描述有問題。protected成員在子類的可見性,我最初理解是子類(不繼承父類protected成員方法)獲取父類被protected修飾的成員屬性或方法,可見性是不可能變的,因為修飾符protected就是描述可見性的。
這道題應該是要考察子類繼承父類,並重寫父類的protected成員方法,該方法的可見性可以修改,這是對的,因為子類繼承父類的方法,訪問權限可以相同或往大瞭改
D對。
E錯:final修飾的方法隻是不能重寫,static修飾的方法隻能訪問類的成員變量
F對。
8、下列哪些情況下會導致線程中斷或停止運行( )
正確答案: A B
InterruptedException異常被捕獲
線程調用瞭wait方法
當前線程創建瞭一個新的線程
高優先級線程進入就緒狀態
題解:
A選項正確,Java中一般通過interrupt方法中斷線程
B選項正確,線程使用瞭wait方法,會強行打斷當前操作,進入阻塞(暫停)狀態,然後需要notify方法或notifyAll方法才能進入就緒狀態
C選項錯誤,新創建的線程不會搶占時間片,隻有等當前線程把時間片用完,其他線程才有資格拿到時間片去執行。
D選項錯誤,調度算法未必是剝奪式的,而準備就緒但是還沒有獲得CPU,它的權限更高隻能說明它獲得CPU被執行的幾率更大而已
9、JAVA反射機制主要提供瞭以下哪些功能?
正確答案: A B C D
在運行時判斷一個對象所屬的類
在運行時構造一個類的對象
在運行時判斷一個類所具有的成員變量和方法
在運行時調用一個對象的方法
題解:
JAVA反射機制概念:
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
Java反射機制主要提供瞭以下功能:
1、在運行時判定任意一個對象所屬的類;
2、在運行時構造任意一個類的對象;
3、在運行時判定任意一個類所具有的成員變量和方法;
4、在運行時調用任意一個對象的方法;
5、生成動態代理。
10、CMS垃圾回收器在那些階段是沒用用戶線程參與的
正確答案: A C
初始標記
並發標記
重新標記
並發清理
題解:
用戶線程(user-level threads)指不需要內核支持而在用戶程序中實現的線程,其不依賴於操作系統核心,應用進程利用線程庫提供創建、同步、調度和管理線程的函數來控制用戶線程。
CMS的GC過程有6個階段(4個並發,2個暫停其它應用程序)
1.初次標記(STW initial mark)
2.並發標記(Concurrent marking)
3.並發可中斷預清理(Concurrent precleaning)
4.最終重新標記(STW remark)
5.並發清理(Concurrent sweeping)
6.並發重置(Concurrent reset)
在初次標記,重新標志的時候,要求我們暫停其它應用程序,那麼這兩個階段用戶線程是不會參與的
答案匯總:
1、正確答案: C
2、正確答案: B
3、正確答案: C
4、正確答案: D
5、正確答案: B
6、正確答案: B
7、正確答案: A C D F
8、正確答案: A B
9、正確答案: A B C D
10、正確答案: A C
總結
本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java日常練習題,每天進步一點點(60)
- Java日常練習題,每天進步一點點(26)
- Java基礎之static的用法
- Java基礎之finally語句與return語句詳解
- Java異常的處理機制