1. 程式人生 > 其它 >java基礎之異常補充說明

java基礎之異常補充說明

異常補充說明:

異常補充

目錄

1、為什麼需要異常

沒有學習異常之前

sout(打錯錯誤資訊)
// 讓程式終止,防止繼續向下執行    
return;     

而現在有了異常之後的使用方式:

// 在這裡來列印異常終止資訊,所以需要我們在類中定義一個屬性說明
throw new XXXException("異常終止資訊");

能夠終止程式執行,並丟擲對應的資訊。相對於原始資訊來說,這種更有自己的選擇性。

異常:列印問題、終止程式繼續向下執行,將錯誤拋給呼叫者

如果不對程式來進行捕捉,那麼將會導致程式的健壯性;

2、異常分類

異常也是一個物件,編譯時異常和執行時異常

對於編譯時異常來說,在程式碼編寫階段,將異常丟擲去,讓開發人員知道這裡可能會有問題,需要來做對應的處理;

執行時異常!將程式碼中的問題丟擲,這裡通常是程式碼邏輯不嚴謹導致的,通常需要提升開發人員的功力。

那麼關於選擇編譯時異常還是執行時異常,通常根據個人選擇來進行判斷:

我的選擇是:如果是強制性的要求並且是內部會使用到的工具類等等,使用編譯時異常;如果是不滿足程式執行的條件的,丟擲執行時異常。

3、JDK8新特性

JDK8新特性

可以在catch程式碼塊中書寫

catch(AException a | BException b | CException c)

4、自定義異常

參考NullPointerException、FileNotFoundException等定義方式

在類中直接提供無參構造和帶異常訊息的有參構造方法

如下所示:

public class MyException extends RuntimeException{
    private String msg;

    public MyException() {
    }

    public MyException(String msg) {
        super(msg);
    }

    public static void main(String[] args) {
        MyException myException = new MyException("我自己定義的異常");
        // 輸出異常物件
        myException.printStackTrace();
        // 獲取得到異常的簡簡訊息
        System.out.println(myException.getMessage());

    }
}

檢視控制檯輸出結果:

com.guang.exception.MyException: 我自己定義的異常
	at com.guang.exception.MyException.main(MyException.java:14)
我自己定義的異常

5、finally補充說明

在java中首先明確兩個規則:

A:程式的順序執行,程式一定是按照從上到下的邏輯來進行執行的;

B:return語句一旦執行,整個方法必然結束;

那麼看一下對應的案例:

public class MyException extends RuntimeException{
    private String msg;

    public MyException() {
    }

    public MyException(String msg) {
        super(msg);
    }

    public static void main(String[] args) {
        MyException myException = new MyException();
        int show1 = myException.show1();
        System.out.println("返回的結果是:"+show1);
        int show2 = myException.show2();
        System.out.println("返回的結果是:"+show2);

    }

    public int show1(){
        int i = 10;
        try {
            return i;
        }finally {
            i++;
            return i;
        }
    }

    public int show2(){
        int i = 10;
        try {
            return i;
        }finally {
            i++;
        }
    }
}

因為加了return,導致的結果就不一樣了。

對應的輸出結果是:

返回的結果是:11
返回的結果是:10