1、非正常情况种类。
异常(Exception)&错误(Error)
都继承至Throwable父类
继承的类关系结构图如下:
2、异常捕获顺序
try catch花括号都不能像if语句那样省略花括号。
顺序:从上至下,catch住后,后面的就不会catch了,所以具体异常类放前面,父类Exception放后面。
try{
...
}catch(ExcetpionClass1 e1){
...
}
catch(ExcetpionClass2 e2){
...
}
catch(ExcetpionClass3 e3){
...
}
catch(ExcetpionClass4 e4){
...
}
Java7后可以使用一个catch块捕获多个异常,使用竖线(|)隔开
catch(ExcetpionClass1 e1 | ExcetpionClass2 e2 | ExcetpionClass3 e3){
...
}
3、finally回收资源
finally块总会被执行
try块是必须存在的,catch和finally二者必选其一或两者都出现。
特例:除非在try catch中使用System.exit(1)退出虚拟机,否则finally块总会执行。
try catch中有return / throw语句时,理应退出方法,但在退出之前会检查是否有finally,若有则先执行finally.
所以避免在finally里使用return/throw语句。
4、异常(Exception)分类
Checked异常、Runtime异常
5、异常抛出
使用throws: 子类抛出的异常不能比父类方法抛出的异常更大。
使用throw:Checked异常必须放在try里,并进行catch处理。Runtime异常刚可直接抛出,相对灵活。