捕获和抛出异常

异常处理机制

概念

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方法中调用此有异常的方法时用快捷键捕获异常

如上图,此时发现程序没有报异常

posted @ 2022-03-31 11:57  无关风月7707  阅读(59)  评论(0编辑  收藏  举报