我很难解释这两个(看似简单)句子的含义:
“检查的异常由编译器在编译时检查”
这是什么意思?编译器检查是否所有已检查的异常(在解码代码中抛出)都被捕获?
“在运行时检查未检查的异常,而不是编译时”
这句话中的“检查”是什么意思?我认为未经检查的异常只是在运行时抛出?
我很难解释这两个(看似简单)句子的含义:
“检查的异常由编译器在编译时检查”
这是什么意思?编译器检查是否所有已检查的异常(在解码代码中抛出)都被捕获?
“在运行时检查未检查的异常,而不是编译时”
这句话中的“检查”是什么意思?我认为未经检查的异常只是在运行时抛出?
There are two types :
Unhandled checked exception: if the method didn't thrown to the required exception, results in a compilation error.
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.
在我看来,第二个陈述是不正确的。或者,如果它是正确的,它使用“检查”来表示与第一句话中的意思不同的东西。这是一种误导和无益的做法。
如果您提供这些句子的上下文(和来源),我可能会被说服。
我认为未经检查的异常只是在运行时抛出?
它们也(可以)在运行时被捕获......也许这就是引用的意思。但如果这就是它的意思,那么它就扭曲了“检查”的正常含义......请参阅之前关于“误导和无益”的注释。
像这样阅读它们可能会更清楚:
“检查的异常在编译时由编译器(测试是否有匹配的 try/catch)” - 如果没有,代码将无法编译
“未经检查的异常是(测试以查看是否有匹配的 try/catch)在运行时,而不是编译时” - 如果没有,代码将崩溃
我同意Unchecked exceptions are checked部分确实具有误导性。更好的解释是将所有 Java throwable 分为三类:
我个人更喜欢将 Checked 异常视为代码中必须捕获的东西,而将运行时异常视为可选捕获的东西。您可以同时处理两者(例如用于日志记录),但您应该尝试仅从 Checked 中恢复。
检查异常往往会引入大量冗余的 catch 子句。在某些情况下,捕获 Checked 异常,将其包装在某个 Unchecked 中并进一步传播它可能是有意义的。
始终牢记 Effective Java 中的第 41 条:避免不必要地使用检查的异常。换句话说,对于调用者无法恢复的情况,或者唯一可预见的响应是程序退出的情况,不要使用检查异常。