異常-總結

這是我參與8月更文挑戰的第6天,活動詳情查看:8月更文挑戰java

一、Java 異常類層次結構圖

image-20210504151746216 image-20210504151637909

二、Error 、Exception

在 Java 中,全部的異常都有一個共同的祖先 java.lang.Throwable 類。數組

Throwable 類有兩個重要的子類:Exception (異常)、Error (錯誤),它們各自都包含大量子類;markdown

Exception 能被程序自己處理 (try-catch),Error 是沒法處理的 (只能儘可能避免);post

  • ErrorError 屬於程序沒法處理的錯誤,咱們沒辦法經過 catch 來進行捕獲。例如,Java 虛擬機運行錯誤 (Virtual MachineErro)、虛擬機內存不夠錯誤 (OutOfMemoryError) 、類定義錯誤 (NoClassDefFoundError) 等。這些異常發生時,Java 虛擬機通常會選擇線程終止。
  • Exception :程序自己能夠處理的異常,能夠經過 catch 來進行捕獲。Exception 有能夠分爲 受檢查異常 (必須處理) 和 不受檢查異常 (能夠不處理)。
    • 受檢查異常
      • Java 代碼在編譯過程當中,若是受檢查異常沒有被 catch/throw 處理的話,就沒辦法經過編譯;
      • 除了 RuntimeException 及其子類之外,其餘的 Exception 類及其子類都屬於受檢查異常;
      • 常見受檢查異常有:IOExceptionClassNotFoundExceptionSQLException……
    • 不受檢查異常
      • Java 代碼在編譯過程當中 ,咱們即便不處理不受檢查異常也能夠正常經過編譯;
      • RunntimeException 及其子類統稱爲不受檢查異常;
      • 例如:NullPointerException (空指針異常)、NumberFormatException (字符串轉換爲數字)、ArrayIndexOutOfBoundsException (數組下標越界)、ClassCastException(類型轉換異常)、ArithmeticException(算數錯誤) 等。

三、try-catch-finally

  • try 塊:用於捕獲異常,其後可接零個或多個 catch 塊,若是沒有 catch 塊,則必須跟一個 finally 塊;spa

  • catch 塊:用於處理 try 捕獲到的異常;線程

  • finally 塊:不管是否捕獲或處理異常,finally 塊裏的語句都會被執行。當在 try 塊或 catch 塊中遇到 return 語句時,finally 語句塊將在方法返回以前被執行指針

    public static int test(){
        try{
            return 5;
        } catch (Exception e){
            e.printStackTrace();
        } finally{
            return 8;
        }
    }
    // 最後返回的是:8
    複製代碼

** 如下三種特殊狀況下,finally將不會被執行:code

  1. trycatch 塊中用了 System.exit(0) 退出程序;
  2. 程序所在的線程死亡;
  3. 關閉 CPU。
相關文章
相關標籤/搜索