异常体系:
Throwable顶层接口:
Error:错误体系,发生这种错误,代表发生了不可挽回的错误,JVM会直接停止运行,并不提供任何可处理机制,只打印相关错误信息。
Exception:异常体系,发生这种异常,相当于生病,有的可处理,有的不可处理,但是都是只是“病”,没有致命的问题,可以解决。
RuntimeException:作为Exception的子类,RuntimeException的行为比较特殊,与Exception表现出不同的状态与行为,以下仔细分析。
Throwable作为顶层接口,具体使用时Error和Exception两个体系,Error我们不常定义使用,Exception常使用。
throw和throws的区别:
throw:抛出一个异常对象,并且在函数内使用,每次只能抛出一个对象。在函数内抛出了异常,需要在函数上声明throws相对应的异常类(RuntimeException例外)
throws:在函数上声明,可以抛出多个异常类,在函数上声明了throws,调用此函数需要进行try{}catch{}处理。(RuntimeException例外)
Throwable体系的特点:都可以被抛出,而且throw和throws关键字也只能操作Throwable体系的类和对象。
处理机制:
三种语法:
try {
} catch (Exception e) {
}
注意:catch可以是多个,但是所捕捉到的异常如果有子父类关系,父类必须放在子类后面。
try {
} finally{
}
finally语法是一定会执行的语句,除非System.exit(0)虚拟机退出,否则的话,就算return了,finally语句块也一定会执行。
try {
} catch (Exception e) {
} finally{
}
前两种的结合。
注意:我们所谓的处理异常,是在catch块中处理异常,如果没有catch就不叫异常处理。比如:
try {
Thread.sleep(10);
}finally{
}
常见的代码,虽然我们try了,但是并没有catch异常,所以这里是编译通不过的。
再比如:
try {
Thread.sleep(10);
}catch (Exception e){
throw e;
}
这样,在catch里面又抛出了一个异常,那么还是属于没处理异常,编译也通不过。
try {
throw new Exception();
}catch (RuntimeException e){
}
值得注意的问题:
在函数内抛出运行时异常,不需要在函数上声明,如果在函数上声明了也不需要再调用的时候try{}catch{}。