Java基礎之異常

1、異常的分類:

① 非運行時異常(Checked Exception)

Java中凡是繼承自Exception但不是繼承自RuntimeException的類都是非運行時異常

② 運行時異常(Runtime Exception/Unchecked Exception)

a) RuntimeException類直接繼承自Exception類,稱爲運行時異常。Java中所有的運行時異常都直接或間接的繼承自RuntimeException.

b) Java中所有的異常類都直接或間接的繼承自Exception。

2、異常的處理:

對應非運行時異常,必須對其進行處理。處理方式有兩種:

       a)使用try…catch…finally語句塊進行捕獲
       b)在產生異常的方法所在的方法聲明throws Exception

對於運行時異常,可以不對其進行處理,也可以對其進行處理。一般情況下都不對其進行處理。

3、捕獲異常:

try {
    FileInputStream fs = new FileInputStream("D:/temp/a.txt");
} catch (FileNotFoundException e) {
    System.out.println("catch...");
    e.printStackTrace();
} finally{
    System.out.println("finally...");
}

4、拋出和捕獲異常:

4.1、把異常交給JVM處理:

public class ExceptionTest {    public static void execute() throws Exception {
        System.out.println("execute...");        throw new Exception();
    }    public static void main(String[] args) throws Exception {
        execute();
    }
}

4.2、或者使用try catch語句塊捕獲異常:

public class ExceptionTest {    public static void execute() throws Exception {
        System.out.println("execute...");        throw new Exception();
    }    public static void main(String[] args) {        try {
            execute();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
}

5、自定義異常:

自定義異常通常是定義一個繼承自Exception類的子類。一般情況下我們都會直接繼承自Exception類,而不會繼承某個運行時的異常類。

5.1、創建自定義異常:

public class MyException extends Exception{    public MyException(){        super();
    }    public MyException(String msg){        super(msg);
    }
}

5.2、在類中使用異常:

public class ExceptionTest {    public static void execute(String a) throws MyException {
        System.out.println("execute...");        if("true".equals(a)){            throw new MyException("參數不能爲 true");
        }
    }
}

5.3、捕獲自定義異常:

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

    execute("true");
}

6、異常使用注意事項:

當使用多個catch語句塊來捕獲異常時,需要將父類的catch語句塊放到子類型的catch塊之後,這樣才能保證後續的catch可能被執行,否則子類型的catch將永遠無法到達,Java編譯器會報編譯錯誤。

如果try語句塊中存在return語句,那麼首先會執行finally語句塊中的代碼,然後才返回。

如果try語句塊中存在System.exit(0)語句,那麼久不會執行finally語句塊的代碼了,因爲System.exit(0)會終止當前運行的JVM。程序在JVM終止前結束執行。


本文轉載鏈接:http://www.itzhai.com/java-based-notebook-java-exceptions-in-the-exception-custom-exception.html


Runtime Exception(unchecked excepition): 
在定義方法時不需要聲明會拋出runtime exception; 在調用這個方法時不需要捕獲這個runtime exception; runtime exception是從java.lang.RuntimeException或java.lang.Error類衍生出來的。 例如:nullpointexception,IndexOutOfBoundsException就屬於runtime exception 


Exception(checked excepition):
定義方法時必須聲明所有可能會拋出的exception; 在調用這個方法時,必須捕獲它的checked exception,不然就得把它的exception傳遞下去;exception是從java.lang.Exception類衍生出來的。例如:IOException,SQLException就屬於Exception

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章