2009-11-01 73 views

回答

17

如果你没有,你每次访问一个数组元素时都必须有try/catch块,做了一个除法操作和许多其他的常见场景。

换一种方式,想象一下这个代码:

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

必须检查ClassCastExceptionArrayIndexOutofBoundsExceptionArithmeticExceptionUnsupportedOperationExceptionNullPointerException,就在我的头顶。

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

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

+0

“没有人认为未经检查的例外情况不好,但是” - 你会感到惊讶:-)然而,在所有其他方面都是+1。 – ChssPly76 2009-11-01 04:32:25

+0

感谢@cletus。 – Moeb 2009-11-01 04:47:16

+6

事实上,如果运行时异常被检查,它将很难处理异常,因为几乎你可以在catch块中做的任何事情都可能导致新的运行时异常,而这又必须被处理... – 2009-11-01 09:48:40

1

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

8

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

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

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

编译器不会检查未经检查的异常,因为未经检查的异常不应该发生,如果他们这样做,那么程序在运行时可以合理地执行任何操作;程序员必须解决这个错误。

在Java中这个功能一直受到一些批评,有些人甚至从Java调用了检查异常a failed experiment和一些人propose to remove checked exceptions

+0

+1整洁的描述。 – Reuben 2011-08-09 09:52:54

相关问题