try/catch 的解釋與用法

NullNameException發表於2018-08-03

目錄


定義

try/catch 語句用於處理程式碼中可能出現的錯誤資訊。通常是程式設計師造成的編碼錯誤或錯別字,也可能是拼寫錯誤或語言中缺少的功能(可能由於瀏覽器差異)。
如果沒有try/catch 的話,就有可能出現異常導致程式崩潰,而try/catch 則可以保證程式的正常執行。
例如:當除數為0時,編譯不會報錯,如果沒有try/catch的話,程式直接崩潰。用try/catch的話,則可以讓程式執行下去,並且輸出為什麼出錯!


語法

try/catch 語句格式如下:

try {
   //嘗試執行的程式碼塊
}
catch (異常型別1 異常的變數名1) { 
   //捕獲錯誤的程式碼塊1
}
...
catch (異常型別2 異常的變數名2) {
   //捕獲錯誤的程式碼塊2
}
finally {
   //最終執行的程式碼塊
}

注意:

catch 和 finally 語句都是可選的,但你在使用 try 語句時必須至少使用一個。catch 可以有多個,當所有的 catch 都不滿足時,再執行 finally 裡的程式碼。


多重捕獲塊

一個 try 程式碼塊後面跟隨多個catch程式碼塊的情況就叫多重捕獲。

  • 如果 try 程式碼塊中發生異常,異常被拋給第一個 catch 塊。
  • 如果丟擲異常的資料型別與 ExceptionType1 匹配,它在這裡就會被捕獲。
  • 如果不匹配,它會被傳遞給第二個 catch 塊。
  • 如此,直到異常被捕獲或者通過所有的 catch 塊。

該例項展示了怎麼使用多重try/catch。

try {
       file = new FileInputStream(fileName);
       x = (byte) file.read();
    }catch(IOException i) {
       i.printStackTrace();
       return -1;
    }catch(FileNotFoundException f) {
       f.printStackTrace();
       return -1;
    }

舉例

下面列出幾種常見情況:

1. NullPointerException 空指標異常

出現該異常的原因在於某個引用為null,但卻呼叫了它的某個方法,這時就會出現空指標異常。

try{
      int a[] = null;
      System.out.println(a[0]);
   }catch(NullPointerException e){
      System.out.println("Exception thrown  :" + e);
   }

2. ArrayIndexOutOfBoundsException 陣列下標越界異常

用非法索引訪問陣列時丟擲的異常。如果索引為負或大於等於陣列大小,則該索引為非法索引。

try{
      int a[] = new int[2];
      System.out.println("Access element three :" + a[3]);
   }catch(ArrayIndexOutOfBoundsException e){
      System.out.println("Exception thrown  :" + e);
   }

3. ArithmeticException 數學運算異常

當出現異常的運算條件時,丟擲此異常。例如,一個整數”除以零”時,丟擲此類的一個例項。

try{
      int a = 10;
      int b = 0;
      int c = a/b;
      System.out.println(c);
   }catch(ArrayIndexOutOfBoundsException e){
      System.out.println("Exception thrown  :" + e);
   }

4. ClassCastException 型別轉換異常

當試圖將物件強制轉換為不是例項的子類時,丟擲該異常。

5. NumberFormatException 數字格式異常

當應用程式試圖將字串轉換成一種數值型別,但該字串不能轉換為適當格式時,丟擲該異常。

相關文章