異常深入剖析

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

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

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

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

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

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

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

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