1
16
因为这是一个“运行时”异常。 运行时异常 用于识别编程问题(一个好的程序员可以避免),而 已检查异常 是为了识别环境问题(例如,无论您的程序有多好,服务器都会关闭,这是无法避免的) 你可以阅读更多关于 them here 实际上 three kinds of exceptions ,只应处理其中一个(大多数情况下) |
2
7
见 Thinking in Java 对于选中与未选中异常的良好解释。 有些人认为检查异常是一个失败的实验。例如,Spring和Hibernate都使用未检查的异常,并且经常在未检查的版本中包装检查的异常。 |
3
6
NumberFormatException扩展了RuntimeException,您不必显式处理继承自RuntimeException的任何内容。 其他RuntimeException包括NullPointerException和IndexOutOfBoundsException。这些是程序员可以避免的,并且必须尝试/捕捉这些类型的异常会创建一些相当混乱的代码。 |
4
2
只是对工具箱答案的一个长评论。 检查异常是一个问题的原因是它们最终会导致如下代码:
这是最坏的情况。首先,他们没有记录到他们正在捕获异常。这种情况经常发生,而且几乎是由非常愚蠢的检查异常(如thread.sleep())强制执行的,它会抛出必须捕获的InterruptedException,但99%的时间您不在乎是否有一个异常。 在上面的例子中,如果抛出的不止一个,人们往往只捕获“异常”,这一事实就更加复杂了。这意味着,即使抛出了一个关键的未经检查的异常,它也会被捕获并被忽略,从而几乎不可能找到问题。 不止一次,我在团队中花了一个人月的时间来寻找以这种方式隐藏的bug。 这是一个很好的概念,当你加上一个事实,那就是人类是必须负责任地执行它的人时,它就变得可怕了。 |