为什么Java中的运行时异常"未选中"?

Moe*_*oeb 6 java runtime checked-exceptions

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

cle*_*tus 17

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

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

Map map = ...
int i = ...
(int[])map.get("foo")[3] = 2334 / i;
Run Code Online (Sandbox Code Playgroud)

必须检查ClassCastException,ArrayIndexOutofBoundsException,ArithmeticException,UnsupportedOperationExceptionNullPointerException就在我的头顶.

使用Java时,问题不是未经检查的异常.被检查的例外是一个备受争议的主题.有人说这主要是用Java进行的实验,在实践中它们不起作用,但你会发现很多人认为它们很好.

然而,没有人认为未经检查的例外情况很糟糕.

  • 实际上,如果检查了运行时异常,那么无论如何都很难处理异常,因为几乎你在catch块中可以做的任何事情都可能导致新的运行时异常,而这反过来又必须处理...... (6认同)

Jes*_*per 8

Java中的两种异常(已检查和未检查)的想法是,已检查的异常应用于可合理预期会发生的错误条件,未经检查的异常应用于意外错误条件.

例如,如果找不到文件,则会得到一个FileNotFoundException,并且期望您的程序能够处理这样的条件是合理的.未经检查的异常应仅用于不应发生的问题,这实际上意味着如果发生此类问题,程序中存在错误.例如,NullPointerException表示您的程序试图取消引用变量,null这很可能是一个错误.

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

编译器不会检查未经检查的异常,因为无论如何都不应该发生未经检查的异常,如果这样做,程序在运行时可以合理地执行任何操作; 程序员必须解决这个bug.

在Java中对这个功能提出了一些批评,有些人甚至将检查过的异常称为失败的实验,有些人建议从Java中删除已检查的异常.