異常深入剖析

try{ ... } catch(Exception e){ ... } finally{ ... }
  • try:是用來監(jiān)測可能會出現(xiàn)異常的代碼段。
  • catch:是用來捕獲 try 代碼塊中某些代碼引發(fā)的異常,如果 try 里面沒有異常發(fā)生,那么 catch 也一定不會執(zhí)行。在 Java 語言中,try 后面可以有多個 catch 代碼塊,用來捕獲不同類型的異常,需要注意的是前面的 catch 捕獲異常類型一定不能包含后面的異常類型,這樣的話,編譯器會報(bào)錯。
  • finally:不論 try-catch 如何執(zhí)行,finally 一定是最后執(zhí)行的代碼塊,所有通常用來處理一些資源的釋放,比如關(guān)閉數(shù)據(jù)庫連接、關(guān)閉打開的系統(tǒng)資源等。

需要注意的是 Java 虛擬機(jī)會從上往下匹配錯誤類型,因此前面的 catch 異常類型不能包含后面的異常類型。

錯誤試?yán)?/h4>
try {
  // ...
  int i = Integer.parseInt(null);
} catch (Exception e) {
}
  • 盡量不要捕捉通用異常,也就像Exception這樣的異常,而是應(yīng)該捕獲特定異常,這樣更有助于你發(fā)現(xiàn)問題。
  • 不要忽略異常,像上面的這段代碼只是加了catch,但沒有進(jìn)行任何的錯誤處理,信息就輸出了,這樣在程序中出現(xiàn)問題的時候,根本找不到問題出現(xiàn)的原因。

異常處理對程序性能的影響

異常處理固然好用,但不能濫用

  • try-catch代碼段會產(chǎn)生額外的性能開銷,它往往會影響JVM對代碼的優(yōu)化,因此建議僅捕獲有必要的代碼段,盡量不要一個大的try包住整段的代碼。
  • java每實(shí)例化一個Exception,都會對當(dāng)時的棧進(jìn)行快照,這是一個相對比較重的操作。如果非常頻繁,開銷不可忽略。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容