Python知識分享網(wǎng) - 專業(yè)的Python學習網(wǎng)站 學Python,上Python222
10道Java常見異常面試題含答案(很全) PDF 下載
匿名網(wǎng)友發(fā)布于:2024-01-17 10:04:49
(侵權舉報)
(假如點擊沒反應,多刷新兩次就OK!)

10道Java常見異常面試題含答案(很全) PDF 下載   圖1

 

 

 

資料內容:

 

 

1. Error 和 Exception 區(qū)別是什么?
Error 類型的錯誤通常為虛擬機相關錯誤,如系統(tǒng)崩潰,內存不足,堆棧溢出等,編譯器不會對這類錯誤進
行檢測,JAVA 應用程序也不應對這類錯誤進行捕獲,一旦這類錯誤發(fā)生,通常應用程序會被終止,僅靠應用
程序本身無法恢復;
Exception 類的錯誤是可以在應用程序中進行捕獲并處理的,通常遇到這種錯誤,應對其進行處理,使應用
程序可以繼續(xù)正常運行。
2. 運行時異常和一般異常(受檢異常)區(qū)別是什
么?
運行時異常包括 RuntimeException 類及其子類,表示 JVM 在運行期間可能出現(xiàn)的異常。 Java 編譯器不會
檢查運行時異常。
受檢異常是Exception 中除 RuntimeException 及其子類之外的異常。 Java 編譯器會檢查受檢異常。
RuntimeException異常和受檢異常之間的區(qū)別:是否強制要求調用者必須處理此異常,如果強制要求調用者
必須進行處理,那么就使用受檢異常,否則就選擇非受檢異常(RuntimeException)。一般來講,如果沒有特
殊的要求,我們建議使用RuntimeException異常。
3. JVM 是如何處理異常的?
在一個方法中如果發(fā)生異常,這個方法會創(chuàng)建一個異常對象,并轉交給 JVM,該異常對象包含異常名稱,異
常描述以及異常發(fā)生時應用程序的狀態(tài)。創(chuàng)建異常對象并轉交給 JVM 的過程稱為拋出異常??赡苡幸幌盗械?br /> 方法調用,最終才進入拋出異常的方法,這一系列方法調用的有序列表叫做調用棧。
JVM 會順著調用棧去查找看是否有可以處理異常的代碼,如果有,則調用異常處理代碼。當 JVM發(fā)現(xiàn)可以處
理異常的代碼時,會把發(fā)生的異常傳遞給它。如果 JVM 沒有找到可以處理該異常的代碼塊,JVM 就會將該異
常轉交給默認的異常處理器(默認處理器為 JVM 的一部分),默認異常處理器打印出異常信息并終止應用程
序。
4. throw 和 throws 的區(qū)別是什么?
Java 中的異常處理除了包括捕獲異常和處理異常之外,還包括聲明異常和拋出異常,可以通過throws 關鍵
字在方法上聲明該方法要拋出的異常,或者在方法內部通過 throw 拋出異常對象。
throws 關鍵字和 throw 關鍵字在使用上的幾點區(qū)別如下:
throw 關鍵字用在方法內部,只能用于拋出一種異常,用來拋出方法或代碼塊中的異常,受查異常和非受查
異常都可以被拋出。
throws 關鍵字用在方法聲明上,可以拋出多個異常,用來標識該方法可能拋出的異常列表。一個方法用
throws 標識了可能拋出的異常列表,調用該方法的方法中必須包含可處理異常的代碼,否則也要在方法簽名
中用 throws 關鍵字聲明相應的異常。
5. final、finally、finalize 有什么區(qū)別?
final可以修飾類、變量、方法,修飾類表示該類不能被繼承、修飾方法表示該方法不能被重寫、修飾變量表
示該變量是一個常量不能被重新賦值。
finally一般作用在try-catch代碼塊中,在處理異常的時候,通常我們將一定要執(zhí)行的代碼方法finally代碼塊
中,表示不管是否出現(xiàn)異常,該代碼塊都會執(zhí)行,一般用來存放一些關閉資源的代碼。
finalize是一個方法,屬于Object類的一個方法,而Object類是所有類的父類,Java 中允許使用finalize()方法
在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。
6. NoClassDefFoundError 和
ClassNotFoundException 區(qū)別?
NoClassDefFoundError 是一個 Error 類型的異常,是由 JVM 引起的,不應該嘗試捕獲這個異常。引起該異
常的原因是 JVM 或 ClassLoader 嘗試加載某類時在內存中找不到該類的定義,該動作發(fā)生在運行期間,即編
譯時該類存在,但是在運行時卻找不到了,可能是變異后被刪除了等原因導致;
ClassNotFoundException 是一個受查異常,需要顯式地使用 try-catch 對其進行捕獲和處理,或在方法簽名
中用 throws 關鍵字進行聲明。當使用 Class.forName, ClassLoader.loadClass 或
ClassLoader.findSystemClass 動態(tài)加載類到內存的時候,通過傳入的類路徑參數(shù)沒有找到該類,就會拋出
該異常;另一種拋出該異常的可能原因是某個類已經(jīng)由一個類加載器加載至內存中,另一個加載器又嘗試去
加載它。
7. try-catch-finally 中哪個部分可以省略?