为什么运行时异常在Java中“选中”?
-
11-09-2019 - |
题
为什么它是有意义的有运行时例外的未选中(而不是如果他们的检查)?
解决方案
如果你没有,你会在每次访问数组元素时有try / catch块,做了除法运算和许多其他常见的情况。
要换句话说,设想这样的代码:
Map map = ...
int i = ...
(int[])map.get("foo")[3] = 2334 / i;
必须检查ClassCastException
,ArrayIndexOutofBoundsException
,ArithmeticException
,UnsupportedOperationException
和NullPointerException
就在我的头顶。
使用Java的问题不是unchecked异常。 checked异常是一个极具争议的话题。有人说,这主要是与Java实验,并在实践中他们没有工作,但你会发现很多的谁认为他们是很好的人。
没有一个是争论检查异常是坏但是。
其他提示
二种Java异常的想法(选中和未选中)是经过检查的异常应该用于可合理预期会发生的错误情况,并检查异常应该用于意外的错误条件。
例如,如果一个文件没有找到,你会得到一个FileNotFoundException
,这是合理的预期你的程序能够处理这种情况。 unchecked异常应该只用于不应该发生的问题,并就真的证明存在在程序中的错误,如果这样的问题发生。例如,NullPointerException
意味着你的程序试图取消引用变量,null
,这就是最有可能的错误。
Java编译器迫使程序员来处理检查的异常。这使得编程语言更安全 - 这意味着程序员被迫考虑错误条件,这应该使程序更健壮
在编译器不检查未检查异常,因为unchecked异常不应该反正发生,如果他们这样做,没有什么,该方案可以合理地做到在运行时;程序员必须解决错误。
已经有一些批评在Java这个功能,有些人甚至称checked异常的一个失败的实验和一些人建议以去除检查的异常从Java 的。
这只是意味着,编译器不会强迫你去找一个例外,但你仍然可以把它在运行时。作为一个好处,这可以让你扔从类新的异常,而不需要你改变你的界面,使主叫方改变他们的代码。