error和runtimeExcption是不受查异常(unchecked exception)
throws子句用来抛出不受查异常,throws子句定义的契约非常严格——我们只能抛出在throws子句中声明过的检查型异常,一个方法没有throws子句并不意味着它不能抛出任何异常:这仅仅意味着不能抛出检查型异常。
其余为受查异常(checked exception)
受查异常表示的情形是:虽然这种情况是异常的,但是一定程度上它的发生是可以预计的,而且一旦这种情况确实发生了,就可以以某种方式来处理。要使这种异常能够被检查到,必须标明这种异常的存在,而且要确保方法的调用者会以某种方式来处理异常,或者至少会有意识的选择忽略它。
不受查异常的运行时表示的情形是:大体上来说,它反映了我们程序运行时逻辑中的错误,而且不能再运行时得到恢复。
构建一个新的异常类
如:
public class NoSuchAttributeException extends Exception{
public final String attrname;
public NoSuchAttributeException(String name){
super(“No attribute named \””+name+”\”found”);
}
}
定义异常类的惯用法时至少提供以下4种形式或其变体形式的构造器,以处理异常特有的数据:
throw抛出异常
public void replaceValue(String name,Object newValue)throws NoSuchAttributeException{
…
}
一旦发生了异常,异常发生点之后的动作就都不会发生了,这时将要发生的动作要么是在finally块中,要么是在捕获这个异常的catch块中。
同步异常:throw语句可以产生同步异常,这种异常是作为执行某条特定指令的结果而直接发生的。
异步异常:可以发生在任何时候,与正在被执行的指令无关。异步异常只能以两种特定的形式发生,第一种是java虚拟机的内部错误,是在执行Java虚拟机的内部指令而不是程序的指令时引发的;第二种机制是使用被弃用的Thread.stop方法,或者是没有被弃用的Java虚拟机工具接口中的stopThread方法。
try、catch和finally
进入final子句的原因:
1) try代码正常结束
2) try代码执行了诸如return这样的控制流语句
3) try块中执行的代码抛出了异常