java中為什么把Checked Exception翻譯成受檢的異常

6.Checked Exception(受檢的異常)

馬克-to-win:為什么我大膽的把Checked Exception翻譯成受檢的異常?因為這類異常,編譯器檢查發(fā)現(xiàn)到它后會強令你catch它或throws它(我們之后講),馬克-to-win:而相對于本節(jié)前面我們提到的各種比如ArithmeticException,都是unchecked exception(不受檢)的異常,unchecked異常都是RuntimeException或者它的子類。馬克-to-win:換句話:編譯器檢查發(fā)現(xiàn)到它以后,什么都不管,也什么都不做,直接放行。見下面的例子:



例:1.6.1-本章源碼

public class Test {
    void m1_mark_to_win() {
        throw new RuntimeException("divide by 0");
    }
    public static void main(String[] args)   {
        Test t=new Test();
        t.m1_mark_to_win();
    }
}

輸出結(jié)果:

Exception in thread "main" java.lang.RuntimeException: divide by 0
    at Test.m1_mark_to_win(Test.java:3)
    at Test.main(Test.java:7)

馬克-to-win:注意上面一個例子ArithmeticException是個unchecked exception, 所以什么問題都沒有,編譯器不報錯。馬克-to-win:但是,當我們把ArithmeticException變成 FileNotFoundException這種checked exception時,就會出現(xiàn)問題。馬克-to-win:如下面例:1.6.2,根本就編譯不過去。必須變成1.6.3才能運行。




例:1.6.2(編譯報錯,不能運行)-本章源碼


import java.io.FileNotFoundException;

public class Test {
    void m1_mark_to_win() {
        throw new FileNotFoundException();
    }
    public static void main(String[] args)   {
        Test t=new Test();
        t.m1_mark_to_win();
    }
}

在throw new FileNotFoundException();外面,馬克-to-win:必須包上一個try catch塊兒,程序才能通過編譯。




例:1.6.3-本章源碼

import java.io.FileNotFoundException;
public class Test {
    void m1_mark_to_win() {
        try {
            throw new FileNotFoundException();
        } catch (FileNotFoundException e) {
            System.out.println(" in catch");
            e.printStackTrace();
        }
    }
    public static void main(String[] args)   {
        Test t=new Test();
        t.m1_mark_to_win();
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}

輸出結(jié)果:
 in catch
馬克-to-win:優(yōu)雅結(jié)束
java.io.FileNotFoundException
    at com.Test.m1_mark_to_win(Test.java:6)
    at com.Test.main(Test.java:14)