Java入门之异常
Java中为了处理错误和异常,有一个专门的Throwable类,其定义如下:
class Throwable{
private String message;
private Throwable cause;
......
}
Throwable类的两个子类:Error(通常为致命错误,虚拟机可能退出,程序员不能对此类异常进行处理)、Exception(异常,程序员需要对此类异常进行处理)
Exception 的分类:
(1)运行异常 RuntimeException 程序员可以通过改善代码来避免的异常,对此类异常,编译器不作任何语法检查,如:NullPointerException、ClassNotFoundException 、ArrayIndexOutOfBoundsException 、NoSuchMethodError、IndexOutOfBoundsException、SQLException(Sql语句执行异常)、IOException、IllegalArgumentException(方法参数错误)、IllegalAccessException(无访问权限异常)。
(2)检查异常 CheckedException,异常中除了运行异常,其他的均为检查异常。
异常处理的两种手段:
(1)在函数内部进行处理:try……catch……语句,如:
(2)进行错误广播(返回给调用者):throws Exception
异常处理的过程:
抛出异常后异常进入异常栈,若有catch分支匹配到该异常,进行处理后出栈,继续执行下面的程序;
若匹配不到,返回给调用者。
class Student{
void buyWater() throws AException{ //买水失败异常
try {
……
}
catch(BException e) { //摔断腿异常
……
throws new AException(e); //异常转换,将摔断腿异常转换为买水失败异常
}
}
}
注:覆盖函数不允许声明抛出被覆盖函数未声明的检查异常;覆盖函数的访问权限不能低于被覆盖函数的访问权限。