天天看點

探讨Java中最常見的十道面試題(超經典)



第一,談談final, finally, finalize的差別。

final?修飾符(關鍵字)如果一個類被聲明為final,意味着它不能再派生出新的子類,不能作為父類被繼承。是以一個類不能既被聲明為 abstract的,又被聲明為final的。将變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以後的引用中隻能讀取,不可修改。被聲明為final的方法也同樣隻能使用,不能重載 。

finally?再異常處理時提供 finally 塊來執行任何清除操作。如果抛出一個異常,那麼相比對的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。 

finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器将對象從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在确定這個對象沒有被引用時對這個對象調用的。它是在 Object類中定義的,是以所有的類都繼承了它。子類覆寫 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器删除對象之前對這個對象調用的。

第二,HashMap和Hashtable的差別。

都屬于Map接口的類,實作了将惟一鍵映射到特定的值上。

HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。

Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。

第三,String s = new String("xyz");建立了幾個String Object?

兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。

第四,sleep() 和 wait() 有什麼差別? 搞線程的最愛

sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢複執行。這是因為在那個時刻,其它線程可能正在運作而且沒有被排程為放棄執行,除非(a)“醒來”的線程具有更高的優先級 。

(b)正在運作的線程因為其它原因而阻塞。

wait()是線程互動時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀态,直到被喚醒或等待時間到。

第五,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

第六,Overload和Override的差別。Overloaded的方法是否可以改變傳回值的類型?

方法的重寫Overriding和重載Overloading是Java多态性的不同表現。重寫Overriding是父類與子類之間多态性的一種表現,重載Overloading是一個類中多态性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,将調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變傳回值的類型。

第七,Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何差別?

Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。

equals()和==方法決定引用值是否指向同一對象equals()在類中被覆寫,為的是當兩個分離的對象的内容和類型相配的話,傳回真值。

第八,error和exception有什麼差別?

error 表示恢複不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢出。不可能指望程式能處理這樣的情況。

exception 表示一種設計或實作問題。也就是說,它表示如果程式運作正常,從不會發生的情況。

第九,給我一個你最常見到的runtime exception。

ArithmeticException, ArrayStoreException, 
BufferOverflowException, BufferUnderflowException, 
CannotRedoException, CannotUndoException, 
ClassCastException, CMMException, 
ConcurrentModificationException, DOMException, 
EmptyStackException, IllegalArgumentException, 
IllegalMonitorStateException, IllegalPathStateException, 
IllegalStateException, ImagingOpException, 
IndexOutOfBoundsException, MissingResourceException, 
NegativeArraySizeException, NoSuchElementException, 
NullPointerException, ProfileDataException, 
ProviderException, RasterFormatException, SecurityException, 
SystemException, UndeclaredThrowableException, 
UnmodifiableSetException, UnsupportedOperationException
           

第十,Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何差別?

Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。

equals()和==方法決定引用值是否指向同一對象equals()在類中被覆寫,為的是當兩個分離的對象的内容和類型相配的話,傳回真值。