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)