Java 异常知识点
一、异常的继承结构
????? 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一个方法时,只能够申明和抛出不比它的父类版本中申明的异常多的异常”