7

为什么让 Runtime Exceptions UnChecked 有意义(而不是Checked)?

4

3 回答 3

19

如果您不这样做,则每次访问数组元素、执行除法操作和许多其他常见场景时都必须使用 try/catch 块。

换句话说,想象一下这段代码:

Map map = ...
int i = ...
(int[])map.get("foo")[3] = 2334 / i;

将不得不检查我的头顶上的ClassCastException, ArrayIndexOutofBoundsException, ArithmeticException,UnsupportedOperationException和。NullPointerException

对于 Java,问题不在于未经检查的异常。检查异常是一个极具争议的话题。有人说这主要是对 Java 的一次实验,实际上它们不起作用,但你会发现很多人认为它们很好。

然而,没有人认为未经检查的异常是不好的。

于 2009-11-01T04:24:12.543 回答
9

Java 中的两种异常(已检查和未检查)的想法是,已检查异常应用于可以合理预期发生的错误情况,未检查异常应用于意外错误情况。

例如,如果找不到文件,您会得到一个FileNotFoundException,并且期望您的程序能够处理这种情况是合理的。未经检查的异常应该只用于不应该发生的问题,这实际上意味着如果发生这样的问题,程序中就会存在错误。例如,aNullPointerException表示您的程序正在尝试取消引用一个变量,该变量null很可能是一个错误。

Java 编译器强制程序员处理已检查的异常。这使编程语言更安全——这意味着程序员被迫考虑错误条件,这应该使程序更加健壮。

The compiler doesn't check unchecked exceptions, because unchecked exceptions aren't supposed to happen anyway and if they do, there's nothing that the program could reasonably do at runtime; the programmer must solve the bug.

There has been some criticism to this feature in Java, some people even call checked exceptions a failed experiment and some people propose to remove checked exceptions from Java.

于 2009-11-01T09:23:04.283 回答
1

这仅仅意味着编译器不会强迫你寻找异常,但你仍然可以在运行时抛出它。作为一个好处,这允许你从你的类中抛出新的异常,而不需要你改变你的接口,导致调用者改变他们的代码。

于 2009-11-01T04:24:39.877 回答