java異常類


 

  當程序運行出現異常時,會退出程序結束運行而不至於讓程序崩潰。

1. 異常類

  所有異常的根類是java.lang.Throwable,其下有兩個子類:Error和Exception。

(1) Error

  Error是程序無法處理的錯誤,表面系統JVM處於不可恢復的崩潰狀態,此時錯誤與代碼書寫無關。

  如:內存資源不夠時,將出現OutOfMemeoryError。

(2) Exception

  Exception是程序本身能夠處理的異常。Exception是所有異常類的父類,通常異常分為RuntimeException(運行時異常)、CheckedException(已檢查異常)。

  • RuntimeException通常可添加邏輯處理來避免。如:被0除異常、空指針異常、類型轉換異常、數組下標越界異常、數字格式異常等。
  • CheckedException必須做出處理,否則無法通過編譯。如:IOException、SQLException、自定義異常類等。

2. 異常捕獲

  捕獲異常的關鍵詞:try--catch--finally

try {可能出現異常的語句}
catch (異常類類名 e) {...}
catch (異常類類名 e) {...}
finally {...}

(1) try

  try后面包含可能出現異常的語句。

  try語句至少包含一個catch語句或一個finally語句。

(2) catch

  Throwable類的默認方法:

    toString(): 顯示異常類類名及出現異常的原因。

    getMessage(): 顯示出現異常的原因。

    printStackTrace(): 跟蹤異常事件發生時堆棧的內容。

(3) finally

  在異常處理后一般都會執行的語句放在finally中,如:關閉文件流、斷開數據庫連接等。

要點:

  • 當try、catch中存在return語句時,finally語句也會執行,其執行后再通過return語句退出。
  • 當try、catch中存在System.exit(0)語句時,finally語句不會執行。

3. 異常拋出

  拋出異常不是在出現異常時才出現的,而是代碼中定義的出現異常,使用throw語句拋出異常。拋出的異常必須是Throwable或其子類的實例。

IOException e = new IOException();
throw e;

 

4. 自定義異常類

[訪問修飾符] class 異常類類名 extends Exception {
    [訪問修飾符] 返回值類型 方法名(參數列表) throws 異常類1[, 異常類2] {
        ...
    }
    ...
}

要求:

  • 用戶自定義異常類都是RuntimeException的子類。
  • 自定義異常類通常需要編寫多個重載的構造器。
  • 自定義異常類需要提供serialVersionUID。
// 自定義異常類
class MyException extends Exception {
    static final long serialVersionUID = 13465653435L;
    private int idnumber;

    public MyException(String message, int id) {
        super(message);
        this.idnumber = id;
    }

    public int getId() {
        return idnumber;
    }
}

class TestSelfException {
    public void regist(int num) throws MyException {
        if(num < 0)
            throw new MyException("人數為負值, 不合理", 3);
        else
            System.out.println("登記人數:" + num + "  登記成功");
    }

    public void manager() {
        try {
            regist(100);
            regist(-20);
        } catch(MyException e) {
            System.out.println("登記失敗,出錯種類:" + e.getId());
        }

        System.out.println("本次登記操作結束");
    }

    public static void main(String [] args) {
        TestSelfException tse = new TestSelfException();
        tse.manager();
    }
}

 執行結果:

登記人數:100 登記成功
登記失敗,出錯種類:3
本次登記操作結束

注意:

  throw是拋出異常的關鍵字。

  throws是聲明方法時可能出現的異常類。

5. 斷言

(1)用途

  用於調試,相當於一個if判斷。

(2)用法

  斷言在程序中一般處於關閉狀態,若想要使用,則在編譯后添加參數即可。

java -ea 主類類名

(3)語法

  當bool表達式為False時,在斷言語句處停止並輸出提醒語句;當bool表達式為True時,不做出放行。

assert bool表達式:提醒語句;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM