你們好,我是Java最全面試題庫
的提褲姐,今天這篇是面試系列的第七篇,主要總結了JavaSE中異常類相關面試題,在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。java
Error(錯誤):
系統中的錯誤,是在程序編譯時出現的錯誤,只能經過修改程序才能修正。通常是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。 面試
Exception(異常):
表示程序能夠處理的異常,能夠捕獲且可能恢復。遇到這類異常,應該儘量處理異常,使程序恢復運行,而不該該隨意終止異常。數組
試圖經過字符串來加載某個類時可能引起異常。函數
異常的處理方式有兩種:測試
具體的處理方式的選擇原則:spa
注:異常, 不能捕獲了以後什麼也不作。或者只是使⽤e.printStacktrac
若是try中有return語句, 那麼finally中的代碼仍是會執⾏。
由於return表示的是要整個方法體返回, 因此,finally中的語句會在return以前執⾏。
可是return前執行的finally塊內,對數據的修改效果對於引用類型和值類型會所不一樣:指針
// 測試 修改值類型 static int f() { int ret = 0; try { return ret; // 返回 0,finally內的修改效果不起做用 } finally { ret++; System.out.println("finally執行"); } } // 測試 修改引用類型 static int[] f2(){ int[] ret = new int[]{0}; try { return ret; // 返回 [1],finally內的修改效果起了做用 } finally { ret[0]++; System.out.println("finally執行"); }
public int getNum() { try { int a = 1 / 0; return 1; } catch (Exception e) { return 2; } finally { return 3; } }
返回值爲3。
代碼在走到第 3 行的時候遇到了一個 MathException,這時第四行的代碼就不會執行了,代碼直接跳轉到 catch語句中,走到第 6 行的時候,異常機制有這麼一個原則若是在 catch 中遇到了 return 或者異常等能使該函數終止的話那麼有 finally 就必須先執行完 finally 代碼塊裏面的代碼而後再返回值。所以代碼又跳到第 8 行,惋惜第 8 行是一個return 語句,那麼這個時候方法就結束了,所以第 6 行的返回結果就沒法被真正返回。若是 finally 僅僅是處理了一個釋放資源的操做,那麼該道題最終返回的結果就是 2。所以上面返回值是 3。code
throw:orm
throws:對象