Java 异常
Throwable
1,程序的非正常情况。
2,继承体系:
Throwable
|---Error
|---严重的,不可拒的问题。
|---Exception
|---非RuntimeException必须进行处理,否则编译不通过。
|---throws
|--- try()..catch(){}
|---RuntimeExcetion
|---运行期问题,需要修改参数与代码逻辑。
3,默认处理方式:
默认情况下,JVM会把异常的全路径、位置及原因等信息显示出来。
且程序中止,不会执行到下一步。
4,格式:
1,try..catch..finally
//基本格式 try{ //可能出现的问题 }catch(异常的对象){ //对问题的处理 }finally{ //释放资源 }
2,变形格式:
try...catch..
try...catch..catch
try...catch..catch..finally
try...finally
JDK7新特性:处理多个异常
catch(ExceptionA|ExcepationB|ExcetionC...e){
}
5,注意事项:
1,final,finally,finalize的特点及区别?
final :是修饰符,它修饰的变量是常,它修饰的类不能被继承,它修饰的方法不能被重写。
finally :是异常处理的一部分,特点是永远会被执行,特殊情况:例如在执行到finally之前退出JVM。
finallize :是Object的方法,用于垃圾回收。
2,执行顺序:
在执行try里面的代码会从上至下,如果遇到问题,就会产生一个异常对象到catch里进行匹配;
有对应的匹配就走对应处理方案。
没有,就向上找父类匹配,如果有就找对应处理方案。
没有,JVM就会采取默认的处理方案。
注意:
如果有多个异常,有子父关系,父异常一定要放最后面。
如果是多个异常,没有子父关系,它们所在的位置没有顺序关系。
3,Exception和RuntimeException的区别?
Exception:分为编译期异常和运行期异常,编译期异常是必须处理,否则编译不能通过。
RuntimeException: 运行期异常。不需要写异常代码,但有可能需要修正程序参数与代码逻辑。
4,throws和throw的区别?
throws:在方法声明上,后面跟的是异常类名。
throws后面跟的是编译期异常,调用者是必须要进行处理的。
throws后面跟的是运行期异常,调用者不需要处理,这种方式没有意义。
throw: 在方法体中,后面跟的是异常对象名。
throw后面如果抛出的是运行时期异常对象,那么方法上是不需要进行声明的。
throw后面如果抛出的是编译时期异常对象,那么一般要在方法声明上用throws声明该方法有异常。
5,子类重写父类方法时不能抛出比父类更大的异常。
6,如果catch里面有return,finally还会执行吗?
会执行。
如果执行,是在return之前执行还是在之后执行?
之前。准确的说应该在之间。
注意:
能自己处理的异常,尽量自己处理。
在main方法里尽量不要抛异常。