捕获和抛出异常
异常处理机制
概念
try、catch和finally监测和捕获
异常捕获
很明显除数不能为0,出现了异常
下一步我们去捕获这个异常
检测(try)、捕获(catch)异常
try是监控区域,可以理解为将需要检验是否存在异常的代码部分在try中经受检验
catch用于捕获异常
需要注意的是,finally部分是可以省略的,但检测(try)和捕获(catch)异常部分是必要的
finally
处理善后工作,例如之前学到的scanner.close()关闭交互就放到finally部分
错误捕获
错误没有捕获成功,为什么?
原来是因为没有在catch中声明错误类型
就像是警察逮捕罪犯,有确认罪犯身份信息的证明(错误类型)才能逮捕罪犯(捕获错误类型)
注意:异常捕获和错误捕获都要事先声明异常和错误类型
如何确认错误和异常类型
如何确认错误和异常类型以便进行捕获?
如下图程序编译失败后会自动报出错误和异常类型
***Throwable
如果我懒得确定错误类型具体是什么,完全可以将错误类型声明为throwable
原理如上图所示,基类throwable包含所有错误和异常类
相当于警察抓罪犯找不到罪犯,但可以通过他的犯罪集团来找到集团内部的罪犯(姑且这么理解)
如下图所示,很明显错误被成功捕获了
同理,声明类型的地方根据需要捕获的是错误还是异常来写Error或者Exception也是可以的
但需要注意的是:捕获什么就要声明什么!!!!
如上图,无限循环调用很明显是个错误,捕获异常当然会失败,捕获错误才对!如下图
注意
无论捕获是否成功,finally都是会正常编译的,如下图,捕获错误失败,但负责处理善后工作的finally正常编译了
***多重捕获
1.最大的声明类要放在最下边
如上图,throwable类是最大的,放在最下边声明捕获类型
-
先捕获错误,很明显除数不能为0是异常,所以捕获失败
这种说法是错误的,我debug了一下,发现捕获错误部分和捕获throwable部分都没有执行
-
捕获异常,捕获成功,如下图
快捷捕获
选中要监测捕获的代码,Ctrl+Alt+T,选择下拉菜单中的try/catch/finally,如下图
运行结果自动打印错误的栈信息
抛出异常:throw和throws
如果我们事先知道某方法会有异常,可以选择主动抛出异常
如果在这个方法中我们无法处理这个异常,可以通过throws在方法上抛出这个异常,让其他方法去解决这个异常。如下图所示
main方法中调用此有异常的方法时用快捷键捕获异常
如上图,此时发现程序没有报异常
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律