00015.02 异常的处理:try...catch和try...catch...finally

一、try…catch

如果你希望让程序发生异常以后能改得到控制就需要try…catch来处理
1、语法格式
try{
//可能发生异常的代码
}catch ( 异常类型 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}
//----------------------------------------------------------------------------------------
try{
//可能发生异常的代码
}catch ( 异常类型1 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}catch ( 异常类型2 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}catch ( 异常类型3 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}
……
在这里插入图片描述
会报错,数组越界,为什么呢?因为你一个参数都没给它传啊,你没有给它传值,那么它的长度就是0
在这里插入图片描述
那么怎么给它传值呢?
鼠标右键
在这里插入图片描述
然后配置一下,结果就出来了
在这里插入图片描述
在这里插入图片描述
下面我们继续来看异常处理
如果参数我们设置的是张三和李四,那么下面又进行了求商
在这里插入图片描述
就会报这个错
在这里插入图片描述
这个时候 try……catch 就派上用场了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
但是这个异常并没有考虑到所有的异常,我们还得加

在这里插入图片描述
在这里插入图片描述
下面我们来研究一下
(1)e.printStackTrace() 是啥意思 print 打印 Trace 痕迹
打印异常的详细信息,包括追踪跟踪信息,即对象一路经历了哪些方法
继续 张三 李四 的参数运行代码,看下会打印什么
在这里插入图片描述
(2)e.getMessage() : 返回简单的错误信息提示
在这里插入图片描述
3、打印异常/错误信息
System.err.println( xx )
用于区别于普通的信息,其实也就是改了个颜色,其它的啥也没改
在这里插入图片描述
System.err/println ( ) ; 打印错误信息
System.out.println( );打印正常信息
4、多个catch分支,如何匹配和执行的?
从上到下,依次判断,一旦有一个满足,后面就不看了,只会进一个
建议:如果catch中的异常类型有大小包含关系,那么小的在上,大的在下,如果没有大小包含关系,顺序随意
在这里插入图片描述
因为Exception是它们的父类,如果按照我们从上到下判断的顺序的话,那么所有的异常就都进Exception了,下面的就根本没有机会执行到了
在这里插入图片描述
所以应该小的写在前面,大的写在后面
5、如果catch可以捕获try中发生的异常,那么程序会 try ……catch 下面的代码继续运行,程序不会挂
如果无法捕获try中发生的异常,就会导致当前方法结束并且把异常对象抛出给调用者,如果调用者可以处理,那么从调用者处理后的代码继续运行,否则继续往上抛,最终到达JVM,程序就崩溃了

二、try…catch…finally

如果我们有这样的一个需求:不管try中是否发生异常,也不管catch 是否可以捕获异常,要求有一段代码都必须执行
语法如下:

try{
//可能发生异常的代码
}catch ( 异常类型1 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}catch ( 异常类型2 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}catch ( 异常类型3 异常对象名 ){ //异常对象名绝大多数都是写 e
//处理这个异常的代码
}
……
finally{
//如果我们有这样的一个需求:不管try中是否发生异常,也不管catch 是否可以捕获异常,这段代码都必须执行
}

在这里插入图片描述
在这里插入图片描述

总结

try-catch也可以简写,在C#或者java中也可以这样简写
try{
//可能发生异常的代码
}catch{
//处理这个异常的代码
}

try{
//可能发生异常的代码
}catch{
//处理这个异常的代码
}finally{
//这里的代码一定会执行
}

可以没有catch,但是不能只有 try
//面试题中会出现
try{
//可能发生异常的代码
}finally{
//这里的代码一定会执行
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值