面試刷題2:Exception和Error的區別?


image.png

世界上不存在永遠不出錯的程序。可靠的程序必須處理好意外情況。
java的異常處理機制降低了編寫可靠程序的門檻。
當系統運行變慢,排查發生最頻繁的Excetion可以作為一種調優手段。
那么: Exception和Error有什么區別?

我是李福春,我在准備面試。
通過本篇,你可以學到下圖的知識點。

image.png

Java異常的類層級

image.png

在java體系中,Excetion和Error的關系如上,常見的子類也可見12;

Exception VS Error

先分開介紹:

Exception: 可以預見到的異常情況,應該被捕獲或者處理,在java中,分為檢查異常(編譯期)和不檢查異常(運行期)。

Error: 出現了錯誤系統不能正常運行或者恢復,一般情況不容易發生;

然后說共同點:都繼承自Throwable,在java中至於Throwable的子類可以被Catch或者Throw;

try-catch-finally

java提供的異常處理語法。

隨着java的發展,有更高級的語法優化。

try-with-resource :  自動關閉資源
multile exception: 相同種類的異常集中處理

代碼如下:


try (BufferedReader br = new BufferedReader(…);
     BufferedWriter writer = new BufferedWriter(…)) {// Try-with-resources
// do something
catch ( IOException | XEception e) {// Multiple catch
   // Handle it
} 

在處理異常的時候,有4個基本規則需要注意:

  1. 不要catch 最普遍的Exception ,而應該優先捕獲具體的異常,可以留下足夠的診斷信息;
  2. 不要生吞異常,應該嘗試拋出或者寫到日志,否則無法判斷異常發生的位置;
  3. 不要使用e.printStackTrace(),在分布式系統中,無法確定輸出到了什么位置,應該輸出到日志中;
  4. 提早拋出,晚點捕獲;提高效率;

自定義異常

自定義異常的時候需要注意兩點:
1,盡量不要定義檢查異常
2,異常需要保留足夠的診斷信息,但是也需要脫敏;

異常影響性能

主要兩個原因:

  1. try-catch語句會影響jvm對代碼的優化,所以應該只包含必要的代碼段;
  2. 每次實例化一次Exception,jvm對線程棧進行一次快照,這是一個比較重的操作,非常耗費資源;

原創不易,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM