java中,将所有派生于Error类和RuntimeException类的异常称为unchecked异常(蓝色部分);其它的异常称为checked异常(粉色部分)。
程序中不需要处理Error类和RuntimeException类及其子类的异常,而所有的checked异常必须进行处理,否则会报编译错误。
注意:
finally永远会被执行。
try语句可以只有finally子句,而没有catch子句,也可以只有catch子句,没有finally子句。
例子:
【分析】下面两段代码在编译时有何区别?
public static void main(String args[]) {
throw new IOException();
}
public static void main(String args[]) {
throw new NullPointerException();
}
//第一个是unchecked异常,不会报编译错误;第2个是checked异常,未处理,会报编译错误
finally子句中如果有return语句,则可能会掩盖原始的返回值。分析下列代码:
public static void main(String[] args) {
System.out.println("" + getValue());
}
private static int getValue() {
int z = 0;
try {
z = 8 / 0; //算术异常
return z;
} catch (Exception e) {
return 7;
} finally {
return 8;
}
}
//输出结果一直为8