1.下列哪一個是正確的()。
A.Java程序經編譯后會產生machine code B.Java程序經編譯后會產生DLL
C.Java程序經編譯后會產生byte code D.以上都不正確
解析:Java程序執行機制是:
源程序(*.java文件)-->Java編譯器-->字節碼(*.class文件) -->JVM-->操作系統。
所以選C,值得注意的是運行JVM字節碼的工作是由解釋器來完成的,整個運行過程是:代碼的裝入、校驗和執行。
2.以下哪個關鍵字可以用來為對象加互斥鎖?( )
A.transient B.static C.serialize D.synchronized
解析:synchronized主要用於標識臨界區使之成為一種邏輯上的原子操作,以達到線程間的互斥,
所以選D。
3.下面有關方法覆蓋說法正確的是:( )
A.方法覆蓋要求覆蓋和被覆蓋的方法不能有相同的名字,參數列以及返回值
B.方法覆蓋要求覆蓋和被覆蓋的方法必須具有相同的訪問權限
C.被覆蓋的方法不能比覆蓋的方法拋出更多的異常
D.覆蓋的方法一定不能是private的
解析:子類重寫的方法不能比父類中被重寫的方法擁有更嚴格的訪問權限。
所以選D。
4. throws 關鍵字和 throw 關鍵字有什么區別和聯系?
答案:throw用來在方法體內拋出異常,而throws用來在方法聲明處聲明異常。這兩個關鍵字有着一定的聯系。如果一個方法中使用了throw關鍵字拋出了異常,那么要么立即用try/catch語句進行捕獲, 要么就是用throws進行聲明,否則將出現編譯錯誤。然而, 並不是 只有使用了throw關鍵字之后才能使用throws關鍵字,語法上來說,任何一個方法都可以直接使用throws關鍵字,抽象方法也可以使用。
5.什么是多態?如何實現多態?
答案:多態性(Polymorphism)是指在基類中定義的屬性或方法被派生類繼承后,可以具有不同的數據類型,或表現出不同的行為,從而使得同一個屬性或方法在基類及其各個派生類中具有不同的語義。Java的多態性體現在兩個方面:(1) 方法重載實現的靜態多態性,又 稱為編譯時多態;(2) 方法覆蓋/重寫實現的動態多態性,又稱為運行時多態。
6.靜態變量和實例變量的區別?
答案:實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態變量不屬於某個實例對象,而是屬於類,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。總之,實例變量必須創建對象后才可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。
