JAVA面試題匯總 一

來源:互聯網
上載者:User

1. Java中的異常處理機制的簡單原理和應用。 

當Java程式違反了Java的語義規則時,Java虛擬機器就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是Java類庫內建的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是Java允許程式員擴充這種語義檢查,程式員可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。 

2. Java的介面和C++的虛類的相同和不同處。 

由於Java不支援多繼承,而有可能某個類或對象要使用分別在幾個類或對象裡面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現代碼。當一個類實現了介面以後,該類要實現介面裡面所有的方法和屬性,並且介面裡面的屬性在預設狀態下面都是public static,所有方法預設情況下是public.一個類可以實現多個介面。 

3. 記憶體回收的優點和原理。並考慮2種回收機制。 

Java語言中一個顯著的特點就是引入了記憶體回收機制,使c++程式員最頭疼的記憶體管理的問題迎刃而解,它使得Java程式員在編寫程式的時候不再需要考慮記憶體管理。由於有個記憶體回收機制,Java中的對象不再有“範圍”的概念,只有對象的引用才有“範圍”。記憶體回收可以有效防止記憶體泄露,有效使用可以使用的記憶體。記憶體回收行程通常是作為一個單獨的低層級的線程運行,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的對象進行清除和回收,程式員不能即時的調用記憶體回收行程對某個對象或所有對象進行記憶體回收。回收機制有分代複製記憶體回收和標記記憶體回收,增量記憶體回收。 

4.線程同步的方法。 

wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。 

sleep():使一個正在啟動並執行線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。 

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切地喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。 

Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。 

5. Error與Exception有什麼區別? 

Error表示系統級的錯誤和程式不必處理的異常, 

Exception表示需要捕捉或者需要程式進行處理的異常。 

6. 在java中一個類被聲明為final類型,表示了什麼意思? 

   表示該類不能被繼承,是頂級類。
  
7 heap和stack有什麼區別。

   棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。堆是棧的一個組成元素。

8談談final, finally, finalize的區別。

  final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。 
  finally—異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。 
  finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

9  Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?

  匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。

10  Static Nested Class 和 Inner Class的不同
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。
  註: 靜態內部類(Inner Class)意味著1建立一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象  .

    JAVA面試題匯總:    一 二 三 四

 
 

11   &和&&的區別。 
  &是位元運算符。&&是布爾邏輯運算子。 

12  HashMap和Hashtable的區別。

  都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。 
  HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。 

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

13 Collection 和 Collections的區別。

    Collection是個java.util下的介面,它是各種集合結構的父介面。
  Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。

14 什麼時候用assert。

  斷言是一個包含布林運算式的語句,在執行這個語句時假定該運算式為 true。 
如果運算式計算為 false,那麼系統會報告一個 Assertionerror。它用於調試目的: 
assert(a > 0); // throws an Assertionerror if a <= 0 
斷言可以有兩種形式: 
assert Expression1 ; 
assert Expression1 : Expression2 ; 
  Expression1 應該總是產生一個布爾值。 
  Expression2 可以是得出一個值的任意運算式。這個值用於產生顯示更多調試 
資訊的 String 訊息。 
  斷言在預設情況下是禁用的。要在編譯時間啟用斷言,需要使用 source 1.4 標記:
  javac -source 1.4 Test.java 
  要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。 
  要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。 
  要系統類別中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。 
  可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私人方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程式的狀態。 

15 GC是什麼? 為什麼要有GC? (基礎)。

  GC是垃圾收集器。Java 程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
  System.gc() 
  Runtime.getRuntime().gc()

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

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

17 Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

  Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

18 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正確。

19 sleep() 和 wait() 有什麼區別? 搞線程的最愛

  sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢複執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)“醒來”的線程具有更高的優先順序 (b)正在啟動並執行線程因為其它原因而阻塞。 
  wait()是線程互動時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。 

20 Java有沒有goto? 
  Goto—java中的保留字,現在沒有在java中使用。

 

     JAVA面試題匯總:    一 二 三 四

  • 標籤:java 面試題 
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.