当前位置:   article > 正文

【JavaSE】浅谈Java异常处理(try-catch)_异常处理中哪些步骤是必须的

异常处理中哪些步骤是必须的

JVM默认处理异常的方式:

如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
①把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
②程序停止执行

try-catch-finally

(1)try 块负责监控可能出现异常的代码
(2)catch 块负责捕获可能出现的异常,并进行处理
(3)finally 块负责清理各种资源,不管是否出现异常都会执行
其中 try 块是必须的,catch 和 finally 至少存在一个标准异常处理流程
在这里插入图片描述
抛出异常→捕获异常→捕获成功(当 catch 的异常类型与抛出的异常类型匹配时,捕获成功)→
异常被处理,程序继续运行 抛出异常→
捕获异常→
捕获失败(当 catch 的异常类型与抛出异常类型不匹配时,捕获失败)→
异常未被处理,程序中断运行。

在开发过程中会使用到自定义异常,在通常情况下,程序很少会自己抛出异常,
因为异常的类名通常也包含了该异常的有用信息,所以在选择抛出异常的时候,应该选择合适的异常类,从而可以明确地描述该异常情况,
所以这时候往往都是自定义异常。自定义异常通常是通过继承 java.lang.Exception 类,
如果想自定义 Runtime 异常的话,可以继承java.lang.RuntimeException 类,实现一个无参构造和一个带字符串参数的有参构造方法。
在业务代码里,可以针对性的使用自定义异常。比如说:该用户不具备某某权限、余额不足等。

throws和throw的区别

在这里插入图片描述

try-catch-finally,try里有return,finally还执行么?

结论:执行,并且finally 的执行早于 try 里面的 return
(1)不管有没有出现异常,finally 块中代码都会执行;
(2)当 try 和 catch 中有 return 时,finally 仍然会执行;
(3)finally 是在 return 后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally 中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally 执行前确定的;
(4)finally 中最好不要包含 return,否则程序会提前退出,返回值不是 try 或 catch 中保存的返回值。

附:Throwable接口图

在这里插入图片描述
Exception和Error都是Throwable的子类:
1.Exception(异常):是程序本身可以处理的异常。
2.Error(错误):是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。
3.检查异常(编译器要求必须处置的异常):除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/680563
推荐阅读
相关标签
  

闽ICP备14008679号