天天看點

面試常見java異常題_Java異常常見面試題

1. 什麼是Java中的異常?

異常是指程式在運作過程中發生的一些不正常事件。(如:除0溢出,數組下标越界,所讀取的檔案不存在)

2. Java中的異常處理關鍵字是什麼?

throw:有時我們明确要建立異常對象然後抛出它來停止程式的正常處理。throw關鍵字用于向運作時抛出異常來處理它。

throws:當我們在方法中抛出任何已檢查的異常而不處理它時,我們需要在方法簽名中使用throws關鍵字讓調用者程式知道該方法可能抛出的異常。調用方法可以處理這些異常或使用throws關鍵字将其傳播給它的調用方法。我們可以在throws子句中提供多個異常,也可以與main()方法一起使用。

try-catch:我們在代碼中使用try-catch塊進行異常處理。try是塊的開始,catch是在try塊的末尾處理異常。我們可以使用try有多個catch塊,try-catch塊也可以嵌套。catch塊需要一個應該是Exception類型的參數。

finally:finally塊是可選的,隻能用于try-catch塊。由于異常會暫停執行過程,是以我們可能會打開一些不會關閉的資源,是以我們可以使用finally塊。finally塊總是被執行,無論是否發生異常。

3.Java中的檢查型異常和非檢查型異常有什麼差別?

檢查型異常和非檢查型異常的主要差別在于其處理方式。檢查型異常都需要使用try,catch 和finally 關鍵字在編譯器進行處理,否則會出現編譯器報錯。對于非檢查型異常則不需要這樣做。Java中所有繼承 Exception 的類的異常都是檢查型異常,所有繼承RuntimeException 的異常都被稱為 非檢查型異常。

4. error和exception有什麼差別?

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

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

5. final, finally, finalize的差別?

final用于聲明屬性,方法和類,分别表示屬性不可交變,方法不可覆寫,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,供垃圾收集時的其他資源回收,例如關閉檔案等(在垃圾回收的時候會調用被回收對象的此方法)

6. Java 中什麼是異常鍊?

異常鍊是指在進行一個異常處理時抛出了另外一個異常,由此産生了一個異常鍊條,大多用于将受檢查異常(checked exception)封裝成為非受檢查異常(unchecked exception)或者 RuntimeException。特别注意如果你因為一個異常而決定抛出另一個新的異常時一定要包含原有的異常,這樣處理程式才可以通過 getCause() 和 initCause() 方法來通路異常最終的根源

7. .try-catch-finally-return執行順序?

不管是否有異常産生,finally塊中代碼都會執行

當try和catch中有return語句時,finally塊仍然會執行

finally是在return後面的表達式運算執行的,是以函數傳回值在finally執行前确定的,無論finally中的代碼怎麼樣,傳回的值都不會改變,仍然是之前return語句中儲存的值

finally中最好不要包含return,否則程式會提前退出,傳回值不是try或catch中儲存的傳回值

8. 列出常見的幾種RunException?

NullPointerException - 空指針引用異常

ClassCastException - 類型強制轉換異常

IllegalArgumentException - 傳遞非法參數異常

ArithmeticException - 算術運算異常

ArrayStoreException - 向數組中存放與聲明類型不相容對象異常

IndexOutOfBoundsException - 下标越界異常

NegativeArraySizeException - 建立一個大小為負數的數組錯誤異常

NumberFormatException - 數字格式異常

SecurityException - 安全異常

UnsupportedOperationException - 不支援的操作異常

NegativeArrayException - 數組負下标異常

EOFException - 檔案已結束異常

FileNotFoundException - 檔案未找到異常

SQLException - 操作資料庫異常

IOException - 輸入輸出異常

NoSuchMethodException - 方法未找到異常

java.lang.AbstractMethodError - 抽象方法錯誤。當應用試圖調用抽象方法時抛出。

java.lang.AssertionError - 斷言錯。用來訓示一個斷言失敗的錯誤。

java.lang.ClassCircularityError - 類循環依賴錯誤。在初始化一個類時,若檢測到類之間循環依賴則抛出該異常。

java.lang.ClassFormatError - 類格式錯誤。當Java虛拟機試圖從一個檔案中讀取Java類,而檢測到該檔案的内容不符合類的有效格式時輸出。

java.lang.Error - 錯誤。是所有錯誤的基類,用于辨別嚴重的程式運作問題。這些問題通常描述一些不應被應用程式捕獲的反常情況。

9. Java異常類的重要方法是什麼?

異常及其所有子類不提供任何特定方法,并且所有方法都在基類Throwable中定義。

String getMessage():此方法傳回消息String of Throwable,并且可以在通過構造函數建立異常時提供消息。

String getLocalizedMessage():提供此方法,以便子類可以覆寫它以向調用程式提供特定于語言環境的消息。此方法getMessage()的可抛出類實作隻是使用方法來傳回異常消息。

synchronized Throwable getCause() :此方法傳回異常的原因或null id,原因未知。

String toString():此方法以String格式傳回有關Throwable的資訊,傳回的String包含Throwable類和本地化消息的名稱。

void printStackTrace() :此方法将堆棧跟蹤資訊列印到标準錯誤流,此方法已重載,我們可以将PrintStream或PrintWriter作為參數傳遞,以将堆棧跟蹤資訊寫入檔案或流。