一、异常的继承结构
Java异常的基类为java.lang.Throwable,java.lang.Error和java.lang.Exception继承Throwable,RuntimeException和其它的Exception等继承Exception,具体的RuntimeException继承RuntimeException。
Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
Error体系:Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。
Exception体系:Exception体系包括RuntimeException 和其他非RuntimeException
RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。
处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
二、checked exception和runntime exception
* Runtime exceptions:
在定义方法时不需要声明会抛出runtime exception;
在调用这个方法时不需要捕获这个runtime exception;
runtime exception继承自java.lang.RuntimeException或java.lang.Error。
例如:
public void method1(){
if(true){
throw new RuntimeException();
}
}
public void method2(){
method1();
}
【注意】:method1方法会抛出RntimeEeption,但是在定义时不需要声明,在调用时也不需要用try...catch..来捕获该异常。
* Checked exceptions:
定义方法时必须声明所有可能会抛出的checked exception;
在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;
checked exception都是继承自java.lang.Exception。
例如:
public void method1() throws IOException{
if(true){
throw new IOException();
}
}
public void method2() throws IOException{
method1();
}
public void method3(){
try{
method1();
}catch(Exception e){
e.printStackTrace();
}
}
三、override时应遵循的规则:
规则:“当override一个方法时,只能够申明和抛出不比它的父类版本中申明的异常多的异常”