为什么java中的运行时异常是“未检查的”?

wecizke3  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(279)

为什么不检查运行时异常(而不是检查它们)是有意义的?

1bqhqjot

1bqhqjot1#

这仅仅意味着编译器不会强制您查找异常,但您仍然可以在运行时抛出它。作为一个好处,这允许您从类中抛出新的异常,而无需更改接口,从而导致调用方更改其代码。

l2osamch

l2osamch2#

java中两种异常(checked和unchecked)的思想是,checked异常应该用于可以合理预期会发生的错误情况,unchecked异常应该用于意外的错误情况。
例如,如果找不到文件,则会得到 FileNotFoundException ,并且期望您的程序能够处理这种情况是合理的。未检查的异常应该只用于不应该发生的问题,这实际上意味着如果发生这样的问题,程序中就有一个bug。例如,一个 NullPointerException 意味着您的程序正在尝试取消引用一个 null 那很可能是个虫子。
java编译器强制程序员处理检查过的异常。这使得编程语言更安全—这意味着程序员被迫考虑错误条件,这应该使程序更健壮。
编译器不会检查未检查的异常,因为未检查的异常无论如何都不应该发生,如果发生了,程序在运行时就不能合理地执行任何操作;程序员必须解决这个错误。
java中的这个特性受到了一些批评,有些人甚至称检查异常为失败的实验,有些人建议从java中删除检查异常。

pdkcd3nj

pdkcd3nj3#

否则,每次访问数组元素、执行除法操作和许多其他常见场景时,都必须使用try/catch块。
换言之,想象一下这个代码:

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

必须检查 ClassCastException , ArrayIndexOutofBoundsException , ArithmeticException , UnsupportedOperationException 以及 NullPointerException 就在我头上。
对于java,这个问题不是未检查的异常。检查异常是一个极具争议的主题。有人说这在很大程度上是一个java实验,实际上它们不起作用,但你会发现很多人认为它们很好。
然而,没有人认为未经检查的例外情况是不好的。

相关问题