0

我很难解释这两个(看似简单)句子的含义:

“检查的异常由编译器在编译时检查”

这是什么意思?编译器检查是否所有已检查的异常(在解码代码中抛出)都被捕获?

“在运行时检查未检查的异常,而不是编译时”

这句话中的“检查”是什么意思?我认为未经检查的异常只是在运行时抛出

4

4 回答 4

1
  • At compilation time

There are two types :

  1. Checked: means if the method thrown to the required exception
  2. Unhandled checked exception: if the method didn't thrown to the required exception, results in a compilation error.

    • At run time

Called Unchecked Exception occurs at runtime and need not to be explicitly handled. RuntimeException and its subclasses or Error and its subclasses all fall under Unchecked.

于 2013-07-02T22:34:58.627 回答
1

在我看来,第二个陈述是不正确的。或者,如果它是正确的,它使用“检查”来表示与第一句话中的意思不同的东西。这是一种误导和无益的做法。

如果您提供这些句子的上下文(和来源),我可能会被说服。


我认为未经检查的异常只是在运行时抛出?

它们也(可以)在运行时被捕获......也许这就是引用的意思。但如果这就是它的意思,那么它就扭曲了“检查”的正常含义......请参阅之前关于“误导和无益”的注释。

于 2013-07-02T22:42:26.307 回答
0

像这样阅读它们可能会更清楚:

“检查的异常在编译时由编译器(测试是否有匹配的 try/catch)” - 如果没有,代码将无法编译

“未经检查的异常是(测试以查看是否有匹配的 try/catch)在运行时,而不是编译时” - 如果没有,代码将崩溃

于 2013-07-02T22:52:56.157 回答
-1

我同意Unchecked exceptions are checked部分确实具有误导性。更好的解释是将所有 Java throwable 分为三类:

  • 已检查的异常
  • 运行时异常
  • 错误

我个人更喜欢将 Checked 异常视为代码中必须捕获的东西,而将运行时异常视为可选捕获的东西。您可以同时处理两者(例如用于日志记录),但您应该尝试仅从 Checked 中恢复。

检查异常往往会引入大量冗余的 catch 子句。在某些情况下,捕获 Checked 异常,将其包装在某个 Unchecked 中并进一步传播它可能是有意义的。

始终牢记 Effective Java 中的第 41 条:避免不必要地使用检查的异常。换句话说,对于调用者无法恢复的情况,或者唯一可预见的响应是程序退出的情况,不要使用检查异常

于 2013-07-02T22:40:06.660 回答