什么时候使用Unchecked Exception / Checked Exception?

原文链接:http://www.dubby.cn/detail.html?id=9036

Java为我们提供了异常,通常是通过throws来申明方法可能会抛出的异常,用throw来抛出异常,用try-catch来捕获异常并处理,但是,我们知道除了强制申明或捕获的异常(Checked Exception)之外,Java还为我们提供了Unchecked Exception。

强制申明或捕获Checked Exception是通过编译器保证的。

对习用过C的人来说,可能觉得Exception是多余的,或者不习惯使用Exception;对于某些想着快速完成编码,实现功能的人来说,也不希望被Exception占用太多的代码量。所以有的人会全部使用Unchecked Exception(RuntimeException),对于那些JDK或者其他第三方lib带的Checked Exception也会直接封装成Unchecked Exception,这样代码中几乎在Exception上浪费任何代码。

可是,这样的问题也很明显。我们首先想到的就是,我们白费了Java的苦心,Java给我们设计Exception的目的就是希望我们可以处理一些异常情况(不正常事件)。

Exception代表着程序遇到了异常情况,从而使得正常流程跳到了不正常流程。catch给我们处理异常的机会。

可是真的所有的异常情况我们都能处理吗?有些可以,有些可以适当的处理,有些我们完全无能无力。

举个例子,如果你调用一个方法,你只传了一个int参数,可是,这个方法抛出了一个NullPointerException,你该怎么办?我们什么也做不了,好吧,最多记个日志;如果你调用一个方法需要写一个字符串到指定的文件里,然后抛出个FileNotFoundException,那我们大概知道我们应该先创建这个文件;如果一个方法是给用户下单的,抛出UserNotFoundException,那么至少还可以引导用户注册,不至于无能为力。

所以,如果站在方法层面来看,如果方法的调用方可以通过这个Exception做出某些处理,那么可以考虑把这个异常定义成Checked Exception,并在方法签名处声明,反之,可以定义成Unchecked Exception,不需要声明

其实我们可以猜测一下Java设计者当初的想法,最稳妥的方式是全部都是Checked Exception,这样你能处理的异常你就处理,你不能处理的就忽略(或者仅仅只记日志)。但是,这样的话,代码中会充斥着大量的异常处理代码,比如,空指针,数组越界等等。所以,对于一些我们无能为力的异常,不妨把它定义成Unchecked Exception。

参考资料:Unchecked Exceptions — The Controversy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值