为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA异常的思考与总结

标签:
Java

webp

异常机制的优点

异常是Java的一种语言特征,被用来处理程序运行失败的情况,是强制停止程序继续错误运行的一种手段。当异常发生,程序不知道如何处理时,会把异常抛出,程序会按照原路进行返回,直到异常被处理,从而也可认为异常是一种错误的恢复机制。

与其他语言(例如C)进行比较,看看在它们是如何进行异常处理的:

if (chdir("C:\\temp"))   printf("Unable to change to temp directory: %d\n", errno);
FILE *fp = fopen("C:\\temp\\foo");if (fp == NULL)   printf("Unable to open foo: %d\n", errno);

看到了吗?方法的调用后总是需要通过返回值来判断程序是否正常,这种方式,会使得正常的逻辑和异常处理的逻辑混为一体,不仅代码的可读性极差,工作量大,危险性也高,如果程序员不认为他写的代码会发生错误,从而忽视判断,那么继续运行的程序结果将如何?答案是,无人知晓。。

与此对比,Java通过异常机制强制终止程序,并使用捕捉异常的机制使程序进行恢复,就是一个很大的进步。

异常的分类

Java中通过Throwable这个类来表示任何可以被当成异常而被抛出的类,有两种类型:Error被用来表示编译时和系统错误(编码时异常通常不需要处理),Exception表示是可以被抛出异常的基本类型,它又可以分为被检查异常运行时异常两种。

被检查异常

这种异常被抛出的条件是需要在方法定义后面显式的声明throws关键字,不然编译器会报错Unhandled Exception,而调用方也需要显式try-catch处理的异常,否则编译器会报错Unhandled Exception

    static void f1() throws Exception {        throw new Exception();
    }

运行时异常
这类异常都是从RuntimeException继承而来的,如果发生,会自动的被JVM抛出,不需要显式在方法后声明,调用者也不是必须要进行显式捕捉,这类异常叫运行时异常,也被称为不受检异常

    static void f1() {        throw new RuntimeException();
    }

异常处理及使用

当异常对象被抛出,catch异常处理程序会按照代码书写的顺序匹配最近的异常声明,查找的时候并不需要抛出的异常完全匹配声明异常,基类是可以处理子类异常的。

异常机制能让我们编写代码的时候能够更专注于当前的业务逻辑,这样对于代码而言,主干路会更加清晰,异常处理程序则可以集中在某个角落,等待可能到来的异常。

到底该如何使用受检异常或者运行时异常?

过分的使用受检异常会使得API的调用很不方便,过多的catch语句会让掉用方背负很大的负担。



作者:关捷
链接:https://www.jianshu.com/p/8de6623cce8c


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
205
获赞与收藏
1008

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消