上期回顧:Java筆試題庫(05期)java
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
這裏可能會有誤區,其實普通的類方法是能夠和類名同名的,和構造方法惟一的區分就是,構造方法沒有返回值。
windows
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是恢復掛起的線程,讓這個線程繼續執行下去。