05.24 「javaSE基礎」2018面試-異常處理集

1、java中的異常分為哪些種類?

按照異常需要處理的時機分為編譯時異常(也叫強制性異常)也叫CheckedException和運行時異常(也叫非強制性異常)也叫RuntimeException。只有java語言提供了Checked異常,java認為Checked異常都是可以被處理的異常,所以java程序必須顯示處理Checked異常。如果程序沒有處理Checked異常,該程序就會編譯無法通過。對Checked異常方法有兩種:一是當前方法知道如何處理該異常,則用try...catch塊來處理該異常;二是當前方法不知道如何處理,則是在定義該方法時聲明拋出該異常。

2、下面的程序運行結果是什麼,為什麼?

「javaSE基礎」2018面試-異常處理集

代碼運行到13行時,遇到了一個MathException,這個時候第14行代碼就不會執行,直接跳到catch語句中,走到第16行的時候,異常機制有一個原則如果在catch中遇到了return或者異常等能使該函數終止的話,那麼有finally就必須執行完finally代碼塊裡面的代碼後再返回值。因此代碼又跳到18行,可惜18行又是一個return語句,那麼這個時候方法就結束了,因此第16行的返回結果就無法被真正返回。因此輸出的結果是3。如下圖:

「javaSE基礎」2018面試-異常處理集

3、error和exception的區別?

Error類和Exception類的父類都是Throwable類,區別如下:

Error類一般指的是與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢出等,對於這些錯誤的導致應用程序中斷,僅靠程序本身無法恢復和預防,遇到這樣的錯誤,建議讓程序終止。

Exception類表示程序可以處理異常,可以捕獲且可能恢復。遇到這類的異常,應該儘可能處理異常,使程序恢復運行,而不是隨意終止異常。

4、請寫出5個常見的RuntiemException。

java.lang.NullPointerException空指針異常;出現原因:調用了未經初始化的對象或者是不存在的對象。java.lang.ClassNotFoundException指定的類找不到;出現原因:類的名稱和路徑加載錯誤;通常是程序試圖通過字符串來加載某個類時可能引發異常。java.lang.NumberFormatException字符串轉換為數字異常;出現原因:字符串數據中包含非數字類型字符。java.lang.IndexOutOfBoundsException數組角標越界異常;出現原因:操作數組對象時長度過短。java.lang.lllegalArgumentException方法傳遞參數錯誤。java.lang.ClassCastException數據類型轉換異常。java.lang.NoClassDefFoundException未找到類定義錯誤。SQLException SQL異常,常見於操作數據庫時的SQL語句錯誤。java.lang.InstantiationException實例化異常。java.lang.NoSuchMethodException方法不存在異常。5、throw和throws的區別?

throw:

throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。throw是具體向外拋出異常的動作,所以它跑出的是一個異常實例,執行throw一定是拋出了某種異常。throws:

throws語句是用在方法聲明後面,表示如果拋出異常,由該方法的調用者來進行異常處理。throws主要是聲明這個方法會拋出某種類型的異常,要讓它的使用者知道需要捕獲的異常類型。throws表示出現異常的可能性,並不一定發生這種異常。6、final、finally、finalize的區別?

final:用於聲明屬性、方法和類,分別表示屬性不可變,方法不可覆蓋,被其修飾的類不可繼承。finally:用於異常處理語句結構的一部分,表示總是執行。finalize:Object類的一個方法,在垃圾回收執行器執行的時候會調用被回收對象的此方法,可以覆蓋此方法,提供垃圾收集時的其他資源回收,例如文件關閉等。該方法更像是一個對象生命週期的臨終方法,當該方法被系統調用則代表該對象即將“死亡”,但是需要注意的是,我們主動行為上去調用該方法並不導致該對象“死亡”,這是一個被動的方法(其實就是回調方法),不需要我們調用。

「javaSE基礎」2018面試-異常處理集


分享到:


相關文章: