为什么有运行时异常未检查(而不是如果他们是检查)?为什么运行时异常在Java中“未选中”?
回答
如果你没有,你每次访问一个数组元素时都必须有try/catch块,做了一个除法操作和许多其他的常见场景。
换一种方式,想象一下这个代码:
Map map = ...
int i = ...
(int[])map.get("foo")[3] = 2334/i;
必须检查ClassCastException
,ArrayIndexOutofBoundsException
,ArithmeticException
,UnsupportedOperationException
和NullPointerException
,就在我的头顶。
与Java的问题不是未经检查的例外。检查异常是一个极具争议的主题。有人说这主要是Java的一个实验,实际上它们不起作用,但你会发现很多人认为它们很好。
然而,没有人认为未检查的异常是不好的。
这只是表示编译器不会强制您查找异常,但您仍然可以在运行时将其抛出。作为一个好处,这允许您从您的类中抛出新的异常,而无需更改接口,导致调用者更改其代码。
Java中两种异常(已选中和未选中)的想法是,检查异常应该用于可合理预期会发生的错误状况,而未检查异常应该用于意外错误情况。
例如,如果找不到文件,您将得到FileNotFoundException
,并且期望程序能够处理这种情况是合理的。未经检查的异常只应用于不应该发生的问题,并且这真的意味着如果发生这样的问题,程序中存在一个错误。例如,NullPointerException
意味着您的程序试图取消引用null
的变量,这很可能是一个错误。
Java编译器强制程序员处理检查的异常。这使编程语言更安全 - 这意味着程序员不得不考虑错误条件,这应该使程序更健壮。
编译器不会检查未经检查的异常,因为未经检查的异常不应该发生,如果他们这样做,那么程序在运行时可以合理地执行任何操作;程序员必须解决这个错误。
在Java中这个功能一直受到一些批评,有些人甚至从Java调用了检查异常a failed experiment和一些人propose to remove checked exceptions。
+1整洁的描述。 – Reuben 2011-08-09 09:52:54
- 1. 为什么运行时异常是未经检查的异常?
- 2. java中最常用的运行时异常是什么?
- 3. Nullpointer异常java运行时
- 4. Java运行时异常
- 5. java hibernate运行时异常
- 6. java中有什么异常?
- 7. 为什么在运行单元测试时出现invalidArgument异常?
- 8. 在Python中,为什么这行从文件运行(没有例外),但在shell中运行时抛出异常?
- 9. 在Java中,为什么我们有两种类型的异常选中和未选中。
- 10. Java运行时异常。 Java FX
- 11. 最常见的选中和未选中的Java异常?
- 12. 在PHP中捕获运行时异常
- 13. 在android中获取运行时异常
- 14. 为什么此异常不会导致运行时错误?
- 15. 运行时异常没有编译错误。为什么?
- 16. 为什么FileProvider.getUriForFile导致运行时异常
- 17. 为什么运行JPA时会出现此异常?
- 18. 为什么我收到此运行时异常?
- 19. “为什么运行时异常是不可恢复的?”
- 20. onPostExecute未在AsyncTask中调用(处理程序运行时异常)
- 21. 为什么TSQLT在SQLTest中出错并在手动运行时未运行?
- 22. 什么是Java中的“运行时类”?
- 23. 为什么在SharpGL.dll中发生异常?
- 24. 为什么[[]] [0] ++可以运行,但是[] ++会抛出运行时异常?
- 25. 在Java中处理运行时异常的正确方法
- 26. 在Java中运行递归程序时出现越界异常
- 27. 运行时异常(Java版本问题)
- 28. Java Jar地狱运行时异常
- 29. MongoDB运行时异常Java查询
- 30. 为什么在BackgroundWorker DoWork例程中未捕获异常?
“没有人认为未经检查的例外情况不好,但是” - 你会感到惊讶:-)然而,在所有其他方面都是+1。 – ChssPly76 2009-11-01 04:32:25
感谢@cletus。 – Moeb 2009-11-01 04:47:16
事实上,如果运行时异常被检查,它将很难处理异常,因为几乎你可以在catch块中做的任何事情都可能导致新的运行时异常,而这又必须被处理... – 2009-11-01 09:48:40