Java面試筆試【第六部分】

Java知音發表於2018-05-11

上期回顧:Java筆試題庫(05期)


1,下列說法正確的是()

A.一個檔案裡可以同時存在兩個public修飾的類
B.建構函式可以被重寫(override)
C.子類不能訪問父類非public和protected修飾的屬性
D.final修飾的類可以被繼承

答案:C
一個Java原始檔中最多隻能有一個public類,當有一個public類時,原始檔名必須與之一致,否則無法編譯,如果原始檔中沒有一個public類,則檔名與類中沒有一致性要求。至於main()不是必須要放在public類中才能執行程式。
  重寫是子類繼承父類後對父類的方法進行修改。方法名,引數,返回值必須一樣。 不能重寫被標示為final的方法。如果不能繼承一個方法,則不能重寫這個方法。


擴充套件:重寫override,過載overload的區別

  java的方法過載
就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的引數和不同的定義。呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法,而且返回值型別可以相同也可以不相同,這也是物件導向的多型性。
  java的方法重寫
父類與子類之間的多型性,對父類的函式進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
若子類中的方法與父類中的某一方法具有相同的方法名、返回型別和參數列,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
子類函式的訪問修飾許可權不能少於父類的;
重寫方法只能存在於具有繼承關係中,重寫方法只能重寫父類非私有的方法。

2,for(int x=0,y=0;(y!=0)&&(x<4);x++)迴圈的執行次數是()
A.無限次    
B.執行4次    
C.執行3次    
D.一次也不執行


答案:D
y初始值為0,在整個for迴圈中,y的值不變,故判斷語句中的(y!=0)不成立,故一次也不執行。

3,關於 JAVA 堆,下面說法錯誤的是( )

A.所有類的例項和陣列都是在堆上分配記憶體的        
B.物件所佔的堆記憶體是由自動記憶體管理系統回收
C.堆記憶體由存活和死亡的物件,空閒碎片區組成       
D.陣列是分配在棧中的

答案:D
首先陣列是分配在堆中的,故D的說法不正確。
Java堆的結構:JVM的堆是執行時資料區,所有類的例項和陣列都是在堆上分配記憶體。它在JVM啟動的時候被建立。物件所佔的堆記憶體是由自動記憶體管理系統也就是垃圾收集器回收。堆記憶體是由存活和死亡的物件組成的。存活的物件是應用可以訪問的,不會被垃圾回收。死亡的物件是應用不可訪問尚且還沒有被垃圾收集器回收掉的物件。一直到垃圾收集器把這些物件回收掉之前,他們會一直佔據堆記憶體空間。

4,在使用super 和this關鍵字時,以下描述正確的是()
A.在子類構造方法中使用super()顯示呼叫父類的構造方法;
super()必須寫在子類構造方法的第一行,否則編譯不通過
B.super()和this()不一定要放在構造方法內第一行
C.this()和super()可以同時出現在一個建構函式中
D.this()和super()可以在static環境中使用,包括static方法和static語句塊

答案:A
Java關鍵字this只能用於方法方法體內。當一個物件建立後,Java虛擬機器(JVM)就會給這個物件分配一個引用自身的指標,這個指標的名字就是this。因此,this只能在類中的非靜態方法中使用,靜態方法和靜態的程式碼塊中絕對不能出現this。
super關鍵和this作用類似,是被遮蔽的成員變數或者成員方法或變為可見,或者說用來引用被遮蔽的成員變數和成員成員方法。
不過super是用在子類中,目的是訪問直接父類中被遮蔽的成員,注意是直接父類(就是類之上最近的超類)

5,下列語句哪一個正確()

A.Java程式經編譯後會產生machine code
B.Java程式經編譯後會產生byte code
C.Java程式經編譯後會產生DLL
D.以上都不正確

答案:B
Java位元組碼是Java原始檔編譯產生的中間檔案
java虛擬機器是可執行java位元組碼的假想計算機 java的跨平臺性也是相對與其他程式語言而言的 。
先介紹一下c語言的編譯過程:c的檔案經過C編譯程式編譯後生成windows可執行檔案exe檔案然後在windows中執行。
再介紹java的編譯過程:java的檔案由java編譯程式將java位元組碼檔案就是class檔案在java虛擬機器中執行。機器碼是由CPU來執行的;Java編譯後是位元組碼。
電腦只能執行機器碼。Java在執行的時候把位元組碼變成機器碼。C/C++在編譯的時候直接編譯成機器碼

6,下列哪一種敘述是正確的()

A.abstract修飾符可修飾欄位、方法和類
B.抽象方法的body部分必須用一對大括號{ }包住
C.宣告抽象方法,大括號可有可無
D.宣告抽象方法不可寫出大括號

答案:D
abstract修飾符用來修飾類和成員方法
用abstract修飾的類表示抽象類,抽象類位於繼承樹的抽象層,抽象類不能被例項化。
用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來描述系統具有什麼功能,但不提供具體的實現。
Abstract是Java中的一個重要關鍵字,可以用來修飾一個類或者一個方法。
修飾一個方法時,表示該方法只有特徵簽名(signature),沒有具體實現,而是把具體實現留給繼承該類的子類,所以不能有大括號。

7,下列說法正確的有()

A.class中的constructor不可省略
B.constructor必須與class同名,但方法不能與class同名
C.constructor在一個物件被new時執行
D.一個class只能定義一個constructor


答案:C
這裡可能會有誤區,其實普通的類方法是可以和類名同名的,和構造方法唯一的區分就是,構造方法沒有返回值。

8,GC執行緒是否為守護執行緒()

答案:是

執行緒分為守護執行緒和非守護執行緒(即使用者執行緒)。
只要當前JVM例項中尚存在任何一個非守護執行緒沒有結束,守護執行緒就全部工作;只有當最後一個非守護執行緒結束時,守護執行緒隨著JVM一同結束工作。
守護執行緒最典型的應用就是 GC (垃圾回收器)

9,關於sleep()和wait(),以下描述錯誤的一項是( )

A. sleep是執行緒類(Thread)的方法,wait是Object類的方法;
B. sleep不釋放物件鎖,wait放棄物件鎖;
C. sleep暫停執行緒、但監控狀態仍然保持,結束後會自動恢復;
D. wait後進入等待鎖定池,只有針對此物件發出notify方法後獲得物件鎖進入執行狀態。

答案:D
sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。
wait是Object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。

10,方法resume()負責恢復哪些執行緒的執行( )

A,通過呼叫stop()方法而停止的執行緒。
B,通過呼叫sleep()方法而停止的執行緒。
C,通過呼叫wait()方法而停止的執行緒。
D,通過呼叫suspend()方法而停止的執行緒。

答案:D
suspend可以掛起一個執行緒,就是把這個執行緒暫停了,它佔著資源,但不執行,用resume是恢復掛起的執行緒,讓這個執行緒繼續執行下去。



相關文章