简述
定义:编译或运行时期发生的不正常情况。描述不正常情况的类,就称为异常类。在异常类中,子类名均以父类作为后缀,阅读性较强。
.
异常体系:
-
error::一般不可处理的。 是由jvm运行时抛出的严重性的问题,一般不针对性处理,要直接修改程序。
Exception:可以处理的。
Exception中的分类
-
编译时异常:Exception及其子类(RuntimeException及其子类除外)。编译时即检测发现,可得到快速的针对性处理
运行时异常:RuntimeException及其子类。编译通过,运行时程序被强制停止,让调用者修正代码。
Throwable、throws、throw:
-
Throwable: 可抛的,指问题发生可以抛出,让调用者知道并处理。该接口的子类均具有可抛性,其可抛性通过throws、throw来体现。
throws: 在函数上使用,指明抛出的异常类,可抛出多个(用逗号隔开);
throw : 在函数内使用,抛出的是异常对象
自定义异常:继承
异常的捕捉和处理
格式:
try
{
//需要被检测异常的代码。
}
catch(异常类 变量)//该变量用于接收发生的异常对象
{
//处理异常的代码。
}
finally
{
//一定会被执行的代码,多用于关闭资源,如无资源需要关闭,可不写此代码块。
}
格式的几个变化:
try catch finally
try catch(多个):当没有必要资源需要释放时,可以不用定义finally。
try finally :异常无法直接catch处理,但是资源需要关闭。
处理的原则:
-
1、函数内如果有需要检测的异常,那么要么在内部用try-catch处理,要么抛出(throw),并在函数上声明(throws)该异常类。(RunTimeException除外,内部未处理,在函数上也无需声明)
2、如果一个语句调用了声明异常的函数,同情况1,要么try-catch处理,要么抛出。
3、异常内容可以自己处理时,可try-catch处理,解决不了时 ,抛出,在函数上声明,让调用者处理。
4、一个功能内多个异常,调用时必须对应多个try进行捕捉,并多个catch进行针对性的处理。
5、子类覆盖父类方法时,父类方法如果抛出了异常,子类的方法只能抛出父类的异常或该异常的子类
6、父类如果抛出多个异常,子类只能抛出该异常的子集,父类没有抛出异常,子类也就不能抛出。