11.1 概述
异常发生在运行时
将程序运行中常见的问题抽象为对象-Exception
类中包含(封装)了问题的一些信息(eg:名称,位置)
方便将功能代码和异常处理代码分离
11.2 Throwable
一般可处理的:Exception
一般不可处理的:Error
两者均即成Throwable类
throw和throws关键字将异常抛出
Error是又JVM抛出的较为严重的问题
11.3 原理
在Exception发生时,new一个该Exception,并抛出,main方法将异常抛给JVM,JVM在命令行中打印,并写入log。
11.4 Runtime Exception
除了运行时异常,其它异常均在编译时被检测。
普通异常可以针对性的解决,但Runtime Exception发生时运算无法继续。
多数是由于调用的原因,或者引发了内部状态的改变,运行中遇到时强行停止。
11.5 异常的捕捉
try{
//被检测的代码,包含可能抛出异常的功能
}
catch (Exception e){
//处理e异常的
}
finally{
//一定会执行的代码
}
try后可以跟多个catch捕捉不同异常
11.6 异常处理原则
catch到的异常必须处理,否则程序将继续运行。
1)如果方法可能抛出非Runtime异常,该方法必须声明throws,或用try-catch捕捉
2)调用到抛异常的方法是,必须使用throws 或try-catch
3)可解决时用try-catch,不易解决时将异常throw给调用者
4)抛出多个异常,必须多个catch进行针对性处理
11.7 finally
包含一定会执行的代码,即使catch到异常。(除非System.exit(0); 推出JVM)
一般为关闭或释放资源的动作
11.8 注意事项
1)子类覆盖父类方法是,如果父类方法抛出异常,则子类必须抛出此异常或其子类异常。(可以不抛)(考虑多态)
2)父类抛出多个异常时,子类只能抛出父类异常集的子集。
3)父类若没有抛出异常,子类覆盖方法是也不能抛出异常。