java 异常学习

发布时间:2019-11-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了java 异常学习脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_360_0@

异常的体系机构

Java提供了丰富的异常类,而这些异常类之间又有这严格的继承关系。下面让我们看一下Java中异常的体系结构。

图片描述

首先,Java将所有的不正常情况分为两种,一种是错误(Error),另一种就是我们所说的异常(Exception)

Error错误是我发恢复,不能获取的,如系统崩溃,虚拟机错误,动态链接失败等。这会导致程序直接中断。

Exception是我们常说的异常,他又大致分为两类,一类是运行时异常:RuntimeException,另一类就是其他异常。因为RuntimeException是由Java虚拟机自动抛出并自动捕获,所以又叫非检查异常。而另一类异常就不一样了,需要我们手动的捕获和处理异常,所以叫做检查异常

异常的捕获

介绍了异常的大概情况,下面我们啊来说说如何捕获处理异常。

try...catch...

首先,我们先想一下,如果没有我们使用最原始的解决异常是个什么办法:

if (异常1) {     处理 } else if (异常2) {     处理 } else {     处理  }

没错,就是一大长串的if...else,对每种异常情况进行处理。所以这时我们就希望有一种更加强大的if块,可以一下子表示所有的异常情况然后处理掉。这就有了我们的try...catch

try {     // 业务实现代码     ... } catch (Exception e) {     // 对异常的处理 }

如果try块里的业务逻辑代码出现了异常,系统就会生成一个异常对象,然后将该对象提交给Java运行时环境throw),接着查找catch块,如果找到了合适的catch块,就将该异常对象交由该catch块处理。这个过程又叫做捕获(catch)异常;如果找不到合适的catch块,程序将退出。

多异常捕获

在Java7之前,对多种的异常只能使用多个catch来进行捕获。

try {     // 业务实现代码     ... } catch (Exception1 e1) {     ... } catch (Exception2 e2) {     ... } catch (Exception3 e3) {     ... }

但是从Java7开始,多个异常可以使用同一个catch来捕获。

注意:

1.多种异常类型之间用竖线“|”隔开。
2.异常变量有隐式final修饰,因此不能对异常变量重新赋值。
3.父类异常要在子类异常以后捕获。

finally回收资

finally,最终的,也就是我们处理完异常最后要做的事情。由于有时候我们会在try块里面使用一些资源,这些资源最后也就在finally块里被回收掉了。

try {     // 业务实现代码 } catch (Exception e) {     // 异常处理 } finally {     // 资源回收 }

当然了,如果你说我没有使用资源,不想finally块里做资源回收的操作,也是可以的。

异常链

首先说说为什么会有异常链这种东西。因为对于一个完整的应用而言,都是有比较严格的分层关系的,上层依赖下层的API。而对于用户而言,我们不想看到底层的SQL异常,同时也会使得系统不安全。所以这时我们就要将底层的异常捕获,然后再抛出一个新的业务异常,就可以在新的异常中给出用户比较友好的提示信息。

try {     // 业务逻辑的实现 } catch (SQLException e) {     // 记录原始异常     ...     // 抛出新的异常     throw new AnotherException("访问数据库出现异常"); }

或者我们也可以这样处理异常:

try {     // 业务逻辑的实现 } catch (SQLException ex) {     // 记录原始异常     ...     // 抛出新的异常     throw new AnotherException(ex); }

这是由于Throwable基类有了一个可以接受Exception参数的方法。

总结

对于异常的了解,我还处于入门阶段,虽然平时的项目中也会遇到各种各样的异常,然后解决异常,但是也只能说是对异常有了一个了解。这里也是总结一下前人对于异常的经验吧。

1.不要过多的使用try...catch,尽量使用逻辑去规避异常。
2.多重catch块后面,最好再有个catch块用来捕获Exception异常止遗漏。
3.尽量去处理异常,不要只是简单的使用PRintStackTrace()打印异常。

相信随着编程经历的丰富,我对于异常的理解也会有更进一步的提升。期待自己的Java 异常进阶


友情链接https://www.imooc.com/learn/110

脚本宝典总结

以上是脚本宝典为你收集整理的java 异常学习全部内容,希望文章能够帮你解决java 异常学习所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。