异常
百知教育学习-胡鑫喆-异常
-
异常的父类 : Throwable类,位于java.lang包下
-
Throwable类中提供常用的方法
-
public String getMessage()
:返回String类型的异常信息 -
public void printStackTrace()
:打印跟踪方法调用栈而获得的详细异常信息
-
-
-
Throwable 异常的父类
|- Error 错误 严重 不可避免 不可处理
|- Exception 异常 可以处理
|- RuntimeException子类 未检查异常 可以避免 可处理可不处理
|- 非RuntimeException子类 已检查异常 不可避免 必须处理
-
-
-
异常的产生
-
throw 异常对象 抛出一个异常
-
ma调mb,mb调mc,mc抛出异常
-
异常的传递
-
沿着方法调用链,反向传递
-
在本例中,异常只是一直抛给父类,并没有解决异常
-
-
-
处理异常
-
1.声明抛出 throws
-
2.捕获异常 try-catch 多个catch 先catch子类异常,再catch父类异常,否则会报错
printStackTrace() :打印异常栈追踪信息
-
Finally
-
为了防止出现异常而中断try块里面的代码,导致里面的代码执行不完全
-
try-catch-finally
finally:无论如何都会执行,通常用于释放资源-
比如 try{
插卡
输入密码和金额2000
余额-=2000
吐钱2000
}carch(吐钱异常 e){
余额+=2000 处理异常
}finally{
退卡
}
-
-
finally与return 如果return语句也在finally语句中,那么只会执行finally中的return语句,因为函数只能有一个返回值
-
finally中有给变量值赋值的情况
-
如果在执行finally块前出现return语句,会把在值先缓存起来,等执行完finally块后,再返回缓存起来的值。
- try和finally中都有return返回值的情况,其实finally中还是给变量重新赋值了
-
如果在执行finally块前出现return语句,会把在值先缓存起来,等执行完finally块后,再返回缓存起来的值。
方法覆盖对抛出异常的要求
-
子类方法不能抛出一个父类方法没有抛出的异常
子类方法抛出异常必须是父类方法抛出异常的 同类,子类或不抛
这是为了保证多态的应用,如果子类抛出父类没有抛出的异常,那么 Super s=new Sub();创建一个父类引用子类对象
如果出现子类的异常会抛出,没有任何的防范措施。