天天看點

java異常學習總結

一. 概念

異常是Java中提供的一種識别及響應錯誤情況的一緻性機制。有效地異常處理能使程式更加健壯、易于調試。

二.異常

error:系統内部錯誤,這類錯誤由系統進行處理,程式本身無需捕獲處理。

Exception:Exception是所有異常類的父類。分為非RuntimeException和RuntimeException。

非RuntimeException:指程式編譯時需要捕獲或處理的異常,如IOException、自定義異常等。屬于checked異常。

RuntimeException:指程式編譯時不需要捕獲或處理的異常,如:NullPointerException等。屬于unchecked異常。一般是由程式員粗心導緻的。如空指針異常、數組越界、類型轉換異常等。

三. 常用方法

Exception類和其他普通類一樣,有自己的屬性和方法,為我們提供異常的相關資訊。常用的方法有:

方法 說明

public String getMessage() 傳回關于發生的異常的詳細資訊。這個消息在Throwable類的構造函數中初始化了。

public void printStackTrace() 列印toString()結果和棧層次到System.err,即錯誤輸出流。

// 列印追蹤棧幀

e.printStackTrace();

// 擷取錯誤資訊

System.out.println(e.getMessage());

// 擷取錯誤棧幀的記憶體位址(沒有意義)

System.out.println(e.getStackTrace());

四.異常處理

4.1 throws

【文法格式】 

修飾符 傳回類型 方法名(參數清單) throws 異常類名清單

throws多個異常,用逗号隔開,隻是提醒,不會真正處理,是以無所謂繼承關系

【示例】 

public class TestException { 

public static void main(String[] args) throws FileNotFoundException{ 

File file = new File(“our.txt”); 

InputStream input = new FileInputStream(file); 

}

【注意】 

子類繼承父類,并重寫父類的方法時,若方法中抛出異常,則要求:子類方法抛出異常隻能是父類方法抛出的異常的同類或子類。

4.2 throw

throw的作用是抛出異常,抛出一個異常類的執行個體化對象。

【文法格式】 

throw new XXXException();

【示例】 

public class ExceptionDemo { 

public static void main(String[] args) throws Exception { 

Exception exp = new Exception(“異常方法示範”); 

throw exp; 

}

【總結】

這種抛出異常的方式一般在滿足某條件時主動抛出,即滿足使用者定義的邏輯錯誤發生時執行。

含有throw語句的方法,或者調用其他類的有異常抛出的方法時,必須在定義方法時,在方法頭中增加throws異常類名清單。

使用throws關鍵字聲明的方法表示此方法不處理異常,而交給方法調用處進行處理。

4.3 try…catch

【文法格式】

try{

有潛在異常抛出的語句組

}catch(異常類名 異常形參){

異常處理語句組

}catch(異常類名 異常形參){

異常處理語句組

}catch(異常類名 異常形參){

異常處理語句組

}catch(異常類名 異常形參){

異常處理語句組

}finally{

語句組

}

其中:

  1. try用來捕獲語句組中的異常
  2. catch用來處理異常可以有一個或多個,而且至少要有一個catch語句或finally語句
  3. finally中的語句組無論是否有異常都會執行

    常用捕捉異常方式

  4. try…catch try…finally
  5. try…catch…finally
  6. try…catch1…catch2…finally(展現異常出現的大小順序) 

    說明:多重catch處理異常,大異常類在後,小異常類在前。

    【示例】 

    (1)可以寫多個catch語句進行捕捉.但是從上到下要麼沒有繼承關系,要麼就是從子類到父類,不能寫父類到子類,因為父類就把子類異常捕捉了。

    } catch (FileNotFoundException e) {

    System.out.println(“找不到指定檔案”);

    } catch (NullPointerException e) {

    System.out.println(“不能為空”);

    } catch (Exception e) {

    System.out.println(“别的異常”);

    }

    (2)catch中可以有多個異常捕捉,不可以有繼承關系,如果有就直接寫父類,沒有的話 異常類型 | 異常類型 | 異常類型… e

    } catch (NullPointerException | FileNotFoundException e) {

    System.out.println(1);

    } catch (RuntimeException e) {

    e.printStackTrace();

    }

    (3)java1.7開始隻要把開啟資源的語句放到try(開啟資源語句){}就會自動關閉資源。

5.自定義異常

系統定義的異常主要用來處理系統可以預見的常見運作錯誤,對于某個應用所特有的運作錯誤,需要程式設計人員根據特殊邏輯來建立自己的異常類。

【文法格式】 

public class 自定義異常類名 extends Exception{ … }

public static void m1(int age) throws myException {

if (age < 18 || age == 18) {

throw new myException(“年齡必須大于18歲”);

}

System.out.println(“注冊成功!!!”);

}

}

public class myException extends Exception {

public myException() {

}

public myException(String error) {

super(error);

}

繼續閱讀