1. 程式人生 > 實用技巧 >基礎知識淺談:javascript:void(0)的作用示例介紹

基礎知識淺談:javascript:void(0)的作用示例介紹

異常

異常(Exception)

異常指的是在程式執行過程中發生的異常事件,通常是由外部問題(如硬體錯誤、輸入錯誤)所導致的

人做事一般都不會一帆風順,會出現意外或者突發情況

檢查性異常:檢查性異常是由於使用者輸入和問題引發的異常,這是程式猿無法預見的,這些異常在編譯時不能被簡單的忽略

執行時異常:執行時異常時可能被程式猿避免的問題,而這些異常在編譯時能被簡單的忽略

錯誤(Error)

錯誤不是異常,而是脫離程式源控制的問題,錯誤在程式碼中通常被忽略,一般都是java虛擬機器生成的

異常與錯誤的區別

異常(Exception)都是執行時的。編譯時產生的不是異常,而是錯誤(Error)。

最開始大家都將程式設計導致的錯誤(Error)認定為不屬於異常(Exception)。

但是一般都將Error作為異常的一種,所以異常一般分兩類,Error與Exception。

出現error一般java虛擬機器都會選擇終止執行緒,而出現Exception一般都在程式中處理

異常的結構

他們的超類(最大的類)是Throwable,有兩個重要的子類Exception和Error,Exception包括了程式的編譯和執行時異常,Error一般都是由於jvm的原因導致的,所以要儘量的避免出現Error因為它屬於嚴重的錯誤

異常的處理機制

捕獲異常
public class Exception {
    public static void main(String[] args) {
        int a=0;
        int b=1;
        try { //監控區域
            System.out.println(b/a);
        }catch (java.lang.Exception e){ //捕獲異常,catch括號裡面是想要捕獲的異常型別
            System.out.println("被除數不能為0");
        }finally { //一般用來關閉資源,無論如何fanally下面的程式碼塊都會執行
            System.out.println("finally");
        }
    }
}

注意點:

  1. try裡面的程式碼發生異常,就會去catch尋找適合的異常型別,然你輸出catch的程式碼塊
  2. catch程式碼塊可以有多個,但是catch裡面的捕獲異常型別必須從小到大的異常類
  3. idea的快捷鍵ctrl+alt+t
  4. try,catch,finally,可以少一個catch,可以少一個finally,但是必須要有try和其中一個
丟擲異常
public class Exception {
    public static void main(String[] args) {
        //一般向上丟擲異常,呼叫時實現try-catch
        try {
            new Exception().test();
        } catch (ArithmeticException e) {
            e.printStackTrace(); //列印異常資訊
        }
    }
    //處理不了這個異常,方法上丟擲異常,交給呼叫的類實現try-catch
    public void test() throws ArithmeticException{
        System.out.println(1/0);
        throw new ArithmeticException(); //一般在方法中使用,主動的丟擲異常
    }
}

自定義異常

一般java內建的異常夠我們使用了,但是使用者也可以自定義異常

自定義異常的類

public class MyException extends java.lang.Exception {
    private int detail; //定義一個變數

    public MyException(int message) { //使用構造方法接受傳進來的值
        this.detail = message; //將私有的變數值等於傳進來的值
    }

    @Override
    public String toString() { //列印輸出資訊
        return "MyException{" +
                "detail='" + detail + '\'' +
                '}';
    }
}

測試類

public class Test {
    static void test(int a) throws MyException {
        if(a>10){ //當傳進來的值大於10
            throw new MyException(a); //呼叫自定義異常的類中構造器的方法
        }
        System.out.println(a); //輸出傳進來的值
    }

    //要麼給這個方法往上丟擲,要麼實現try-catch
    public static void main(String[] args) {
        try {
            test(11); //呼叫靜態test的方法
        } catch (MyException e) {
            System.out.println("出現異常"+e); //輸出自定義類中的列印輸出方法
            //當我們呼叫 print 或者 println 列印一個物件時,它會打印出這個 物件的 toString()的最終根源
            //不懂的可以看看百度
        }
    }
}