試試你是否是java高手?

 第一,Static Nested Class 和Inner Class的不同,說得越多越好(面試題有的很籠統)。
   
    Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。
   
    注: 靜態內部類(Inner Class)意味着1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象。
   
    第二,HashMap和Hashtable的區別。
   
    都屬於Map接口的類,實現了將惟一鍵映射到特定的值上。
   
    HashMap 類沒有分類或者排序。它允許一個null 鍵和多個null 值。
   
    Hashtable 類似於HashMap,但是不允許null 鍵和null 值。它也比HashMap 慢,因爲它是同步的。
   
    第三,啓動一個線程是用run()還是start()?
   
    啓動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標誌來停止一個線程。
   
    第四,sleep() 和wait() 有什麼區別? 搞線程的最愛
   
    sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因爲在那個時刻,其它線程可能正在運行而且沒有被調度爲放棄執行,除非(a)"醒來"的線程具有更高的優先級。(b)正在運行的線程因爲其它原因而阻塞。wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
   
    第五,Collection 和Collections的區別。
   
    Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
   
    Collection是個java.util下的接口,它是各種集合結構的父接口。

第六,error和exception有什麼區別?
   
    error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
   
    第七,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
   
    接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
   
    第八,談談final, finally, finalize的區別。
   
    final-修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。因此一個類不能既被聲明爲abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載。
   
    finally-再異常處理時提供finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的catch 子句就會執行,然後控制就會進入finally 塊(如果有的話)。
   
    finalize-方法名。Java技術允許使用finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在Object 類中定義的,因此所有的類都繼承了它。子類覆蓋finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
   
    第九,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
   
    方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
   
    第十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?
   
    是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章