Exception
异常分为两种
一:典型的错误Error
方法递归调用发生的StackOverflowError和不断在堆中创建对象出现的OutOfMemoryError
二:就是现在准备提起的Exception异常,前者Error往往是严重错误无法挽救,而Exception在采取措施后让程序恢复正常
两者均继承自Throwable
异常处理方法
积极处理:
方式一
try {
// 有可能出现异常的代码
} catch( 异常类型 ) {
// 捕获异常后的代码
}finally{
释放资源;
}
注意事项:
try中代码越少越好
catch中尽可能都做处理
方式二:
try {
可能出现问题的代码 ;
}catch(异常名1 变量名1){
对异常的处理方式 ;
}catch (异常名2 变量名2){
对异常的处理方式 ;
}finally{
释放资源;
}
注意事项:
1:能明确的尽量明确,不要用大的来处理。
2:如果出现了子父关系,父必须在后面。
方式三:
try {
可能出现问题的代码 ;
}catch(异常名1 | 异常名2 | .... 变量名){
对异常的处理方案 ;
}
注意事项:
1.异常之间只能是平级关系
2.处理方式一致
消极处理
在方法声明处添加throws抛出异常,将异常抛给方法调用者处理,当最终异常传给main方法时,异常传到jvm,程序运行结束
分类:
未检查异常(uncheck) :
RuntimeException或它的子类
Error和它的子类
检查异常(check) :
Throwable
Exception以及他们的子类
检查异常需要强制地配合try-catch或throws一起使用
自定义异常:
1)子类的重写方法,不能抛出比父类更多的异常(检查异常)
2)子类的重写方法,可以不抛出异常
3)尽可能将检查异常转换为未检查异常抛出
finally关键字
try {
//可能出现问题的代码
} catch(Exception e) {
//对异常的处理方法
} finally {
// 无论出现异常与否,总会被执行的代码
}
注意:
1)如果try,catch以及finally均出现return语句,以finally中的为准
2)如果try有return,finally只是对返回的变量做修改,那么不影响return结果
final,finally,finalize的区别:
final:状态修饰符,用于修饰类,变量和方法
finally:用于try...catch语句,用于释放资源
finalize:Object类中的方法,用于回收垃圾