uncheck exception非检查型异常,所有继承RuntimeException或者RuntimeException子类的异常都是uncheck exception。
check exception检查型异常,除非检查型异常外的异常都是检查型异常了。check exception需要程序员处理。
两个示例方法如下,分别代表了一个uncheck exception和check exception
uncheck exception:
check exception:
调用的时候:
执行结果如下:
in test1
java.lang.IllegalAccessException: 抛出访问异常...
at com.xino.study.file.ExceptionTest.test1(ExceptionTest.java:8)
at com.xino.study.file.ExceptionTest.main(ExceptionTest.java:18)in test2
Exception in thread "main" java.lang.IllegalArgumentException: 抛出参数异常...aa
at com.xino.study.file.ExceptionTest.test2(ExceptionTest.java:13)
at com.xino.study.file.ExceptionTest.main(ExceptionTest.java:22)
注意以上代码,在声明函数的时候,check exception需要throws异常出来,而uncheck exception不需要。调用的时候,check exception需要用try{}catch{}显式捕获异常并处理,uncheck exception不需要。
除了以上区别,还有其它区别,当程序执行过程中,遇到uncheck exception,则程序中止,不再执行之后的代码。修改main函数如下:
执行结果:
in test2
Exception in thread "main" java.lang.IllegalArgumentException: 抛出参数异常...aa
at com.xino.study.file.ExceptionTest.test2(ExceptionTest.java:13)
at com.xino.study.file.ExceptionTest.main(ExceptionTest.java:17)
可以看到test1函数根本没有执行到。
check exception检查型异常,除非检查型异常外的异常都是检查型异常了。check exception需要程序员处理。
两个示例方法如下,分别代表了一个uncheck exception和check exception
uncheck exception:
public static void test2(String param){
System.out.println("in test2");
throw new IllegalArgumentException("抛出参数异常..."+param);
}
check exception:
public static void test1() throws IllegalAccessException {
System.out.println("in test1");
throw new IllegalAccessException("抛出访问异常...");
}
调用的时候:
public static void main(String args[]){
try {
test1();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
test2("aa");
}
执行结果如下:
in test1
java.lang.IllegalAccessException: 抛出访问异常...
at com.xino.study.file.ExceptionTest.test1(ExceptionTest.java:8)
at com.xino.study.file.ExceptionTest.main(ExceptionTest.java:18)in test2
Exception in thread "main" java.lang.IllegalArgumentException: 抛出参数异常...aa
at com.xino.study.file.ExceptionTest.test2(ExceptionTest.java:13)
at com.xino.study.file.ExceptionTest.main(ExceptionTest.java:22)
注意以上代码,在声明函数的时候,check exception需要throws异常出来,而uncheck exception不需要。调用的时候,check exception需要用try{}catch{}显式捕获异常并处理,uncheck exception不需要。
除了以上区别,还有其它区别,当程序执行过程中,遇到uncheck exception,则程序中止,不再执行之后的代码。修改main函数如下:
public static void main(String args[]){
try {
test1();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
test2("aa");
}
执行结果:
in test2
Exception in thread "main" java.lang.IllegalArgumentException: 抛出参数异常...aa
at com.xino.study.file.ExceptionTest.test2(ExceptionTest.java:13)
at com.xino.study.file.ExceptionTest.main(ExceptionTest.java:17)
可以看到test1函数根本没有执行到。