Java異常分類及處理

1、概念

若是某個方法不能按照正常的途徑完成任務,就能夠經過另外一種路徑退出方法。在這種狀況下
會拋出一個封裝了錯誤信息的對象。此時,這個方法會馬上退出同時不返回任何值。另外,調用
這個方法的其餘代碼也沒法繼續執行,異常處理機制會將代碼執行交給異常處理器。java

2、異常分類

Throwable 是 Java 語言中全部錯誤或異常的超類,在 Java 中只有 Throwable 類型的實例才能夠被拋出(throw)或者捕獲(catch),它是異常處理機制的基本組成類型。
實例分爲 Error 和 Exception 兩種。程序員

2.一、Error

Error 類是指 java 運行時系統的內部錯誤和資源耗盡錯誤。應用程序不會拋出該類對象。若是
出現了這樣的錯誤,除了告知用戶,剩下的就是盡力使程序安全的終止。面試

2.二、Exception

Exception 又有兩個分支 , 一個是運行時異常 RuntimeException , 一 個是檢查異常 CheckedException。安全

RuntimeException 如 :NullPointerException 、 ClassCastException ;
CheckedException 如: I/O 錯誤致使的 IOException、SQLException。微信

RuntimeException 是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。 若是出現 RuntimeException,那麼一
定是程序員代碼書寫致使的錯誤.app

CheckedException:通常是外部錯誤,這種異常都發生在編譯階段,Java 編譯器會強
製程序去捕獲此類異常,即會出現要求你把這段可能出現異常的程序進行 try catch,該類異常一
般包括幾個方面:函數

  1. 試圖在文件尾部讀取數據
  2. 試圖打開一個錯誤格式的 URL
  3. 試圖根據給定的字符串查找 class 對象,而這個字符串表示的類並不存在

3、異常的處理方式

3.一、不處理

遇到異常問題不進行具體處理,而是繼續拋給調用者 (throw,throws)
拋出異常有三種形式,一是 throw,再就是 throws,還有一種系統自動拋異常。spa

public static void main(String[] args{
    String s = "abc";
    if(s.equals("abc")) {
        // 手動拋出一個數字格式化異常
        throw new NumberFormatException();
    } else {
        System.out.println(s);
    }
}

int div(int a,int b) throws Exception{
    return a/b;
}

3.二、處理

try catch 捕獲異常針對性處理方式code

4、Throw 和 throws 的區別

throws 用在函數上,後面跟的是異常類,能夠跟多個;orm

語法:(修飾符)(方法名)([參數列表])[throws(異常類)]{……}
public void doA(int a) throws Exception1,Exception3{……}

throw 用在函數內,後面跟的是異常對象。

throws E1,E2,E3只是告訴程序這個方法可能會拋出這些異常,方法的調用者可能要處理這些異常,而這些異常E1,E2,E3多是該函數體產生的。
throw則是明確了這個地方要拋出這個異常。

結合來看:

void doA(int a) throws IOException,{
   try{
      ......
   }catch(Exception1 e){
      throw e;
   }catch(Exception2 e){
      System.out.println("出錯了!");
   }
   if(a!=b)
      throw new  Exception3("自定義異常");
}

throws 用來聲明異常,讓調用者知道該功能可能會出現的問題(好比上方的 IO 異常),能夠給出預先的處理方式;
throw 拋出具體的問題對象,執行到 throw,功能就已經結束了,跳轉到調用者,並將具體的問題對象拋給調用者。
也就是說 throw 語句獨立存在時,下面不要定義其餘語句,由於執行不到。

歸納:
throws 表示出現異常的一種可能性,並不必定會發生這些異常;
throw 則是拋出了異常,執行 throw 則必定拋出了某種異常對象。

5、總結

瞭解 Exception、Error 兩種異常的區別,面試可能會問。
區分 throws、throw使用維度。

若是文章有錯的地方歡迎指正,你們互相留言交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:niceyoo

相關文章
相關標籤/搜索