Yige

Yige

Build

Java中的例外

Java 中的異常處理#

異常的分類#

Java 通過面向對象的方式對異常進行處理,Java 把異常按照不同的類型進行分類。所有異常類的基類是 Throwable 類,兩大子類分別是 Error 和 Exception:

  • Error是程序無法處理的錯誤,例如 OOM 等
  • Exception是程序本身可以進行處理的異常,分兩大類運行時異常(RuntimeException)檢查異常(Checked Exception),檢查型異常需要使用 try, catch 和 finally 關鍵字在編譯期進行處理,否則編譯器會報錯
    image.png

finally 代碼塊的執行#

無論是否捕獲異常,finally 裡的代碼塊都會被執行,涉及 break 及 continue 語句的時候,finally 子句也會得到執行。在以下幾種特殊情況下,finally 塊不會被執行:

  • 在 finally 語句塊中發生了異常。
  • 在前面的代碼中用了 System.exit () 或者已經 return 返回 退出程序。
  • 程序所在的線程死亡。
  • 關閉 CPU

return 和 finally 的執行#

參考: Java 基礎 ——finally return 執行的先後順序

  • return 語句先執行,不過沒有立即返回,而是去執行 finally 語句,等 finally 語句執行完了,return 語句再返回結果!
  • finally 塊中的 return 語句會覆蓋 try 塊中的 return 返回

throw 和 throws 的區別?#

  • throw 用於方法內部,throws 用於方法聲明上
  • throw 後跟異常對象,throws 後跟異常類型
  • throw 後只能跟一個異常對象,throws 後可以一次聲明多種異常類型

final、finally、finalize 有什麼區別?#

  • final:是修飾符,如果修飾類,此類不能被繼承;如果修飾方法和變量,則表示此方法和此變量不能在被改變,只能使用。
  • finally:是 try {} catch {} finally {} 最後一部分,表示不論發生任何情況都會執行,finally 部分可以省略,但如果 finally 部分存在,則一定會執行 finally 裡面的代碼。
  • finalize: 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法

異常處理#

參考自阿里巴巴《Java 規範手冊》

  • 不要捕獲 Java 類庫中定義的繼承自 RuntimeException 的運行時異常類,如:IndexOutOfBoundsException / NullPointerException,這類異常由程序員預檢查來規避,保證程序健壯性
  • 捕獲異常是為了處理它,不要捕獲了卻什麼都不處理而拋棄之
  • 有 try 塊放到了事務代碼中, catch 異常後,如果需要回滾事務,一定要注意手動回滾事務
  • 不能在 finally 塊中使用 return, finally 塊中的 return 返回後方法結束執行,不會再執行 try 塊中的 return 語句
  • 做到精確區分異常類型,避免對大段代碼進行 try-catch,避免使用 Exception 拋出。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。