_12_异常机制

异常
在这里插入图片描述
以上代码.在执行 int c = a/b;的时候 会报错,除数不能为0 ,把整个程序的生命周期终止,后面的代码不会执行

1 异常机制的原理 :
异常是什么 : 就是错误的另外一种说法
在java中有一个专门模拟所有异常和错误的类(Throwable),所有的异常和错误都必须继承这个类
本质是 : 当程序出错之后,jvm会隐性的创建一个对象.获取错误信息,返回给程序调用处
这个异常是我们程序员在写程序的时候,对某些高风险的操作规定了一个提示机制,我们写的这个提示机制,对戏系统来说就是一个处理异常的触发机制

异常一直和正常程序机制,是两条平行线,正常程序机制是我们的main方法里面的调用线,如果程序在正常情况下会正常把程序执行完毕然后退出JVM
同时还有一个看不见的错误线,如果执行过程中出现错误,就会跳转到错误线把错误机制的代码执行完毕,然后退出JVM

2 处理异常的形式
Try…catch… : 一般用在客户端
Throws : 一般用在类库端

Throw : 异常提示的起点

3 finally 语句块
必须执行的语句块,如果在错误抛出之前,我们有必须要执行的操作,可以放到finally中
Finally不能单独出现使用,必须和try 或者 try…catch…一起使用
在这里插入图片描述

以上代码问题,可以通过if…else… 处理,同样可以避免异常
但是if…else…只能处理 可以预知的异常,无法预知的没有办法使用

语法 :
try{
高风险代码;
}catch(Exception e){
错误的处理机制;
}
如果try中的代码,没有出现问题,就不会执行catch
如果try中的某一行代码出现了问题,try后面的语句不执行,直接跳转到catch中执行

在这里插入图片描述使用异常,能够让程序在任何情况下都完整的执行完成
可以使程序更加健壮
程序的鲁棒性(健壮性,稳定性,容错性)
这个叫报错就不太合适了,应该算是一种错误的提醒机制,对程序的生命周期没有影响,后面代码依旧可以执行

异常处理
1 try…catch… : 有问题,捕获处理
2 抛出 : throws 可能有问题,没有处理

处理异常提醒的三个常用方法
1 printStackTrace() : 打印追踪栈帧,从方法调用开始,一直到发生错误
2 getStackTrace() : 错误栈帧内存地址
3 getMessage() : 获取错误信息

Throws : 抛异常,并不会把问题处理,只是一种提示,告诉调用人员,这个方法内部可能有异常,你解决一下
如果 提醒了你,你要么处理,要么throws抛给别人.不能当做看不见

Try…catch…
try{
高风险代码;
}catch(异常类型 变量 ){
处理代码;
}
1 catch语句可以根据代码返回的异常写多个异常类型
2 但是从上到下,必须是从子类到父类,或者没有继承关系,要么会因为多态的原因,把所有的子类异常捕捉
3 try中有多个异常,但是只能有一个执行,因为最先出错的那个语句,后面代码不会执行,直接进入到catch
在这里插入图片描述

刚才哪种写法,如果出错之后的处理措施一样,那么可以不写多个catch,可以直接写一个Exception即可
但是 如果不想写Exception 还有别的写法

1.7开始,可以一次catch多个异常,但是多个异常之间不能有继承关系,如果有,就直接写父类
多个异常之间 用 | 隔开
异常类型1 | 异常类型2 | …

在这里插入图片描述

Throws 也可以抛出多个异常,并且用 逗号 隔开
并且throws的时候,无所谓继承和先后顺序,因为throws只是提醒
在这里插入图片描述
可以调换位置,也没有问题

Finally
必须执行的代码段
比如 关闭资源等
1 不能单独使用
2 必须和 try…finally 或者 try…catch … finally
3 除了 System.exit() 这种情况Finally会不执行,别的情况下都会执行
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值