为什么NullPointerException未声明为已检查的异常

gir*_*iri 22 java nullpointerexception

这是接受采访时提出的问题.NullPointerException很常见; 为什么它不被声明为已检查的例外?我用谷歌搜索,但没有得到正确的答案.

Boz*_*zho 34

几乎每种方法都必须声明抛出它.

public void myMethod(String param) throws NullPointerException {
   //
}
Run Code Online (Sandbox Code Playgroud)

(作为旁注 - 例如,Eclipse会在有"潜在的空指针访问"时向您发出警告,以便您可以尽早阻止异常.)

  • 另外:特别是捕捉一个`NullPointerException`几乎总是一个坏主意. (9认同)

Mic*_*rdt 15

它不是一个经过检查的例外(除其他外),因为它非常常见.它几乎可以在任何地方出现.如果检查过,那么几乎每个Java程序中的每一个方法都必须声明它throws NullPointerException.


Chr*_*ght 12

空指针异常是运行时异常的扩展,因此在程序流中出现意外情况.期望抛出空指针异常是没有意义的(我希望!)因此你永远不会将它声明为已检查的异常.


Hei*_*nzi 5

检查异常的发生可能是因为您的程序几乎无法控制或无法控制的环境中的某些事情出错了(例如IOExceptionSQLException)。您可以预见并处理这种情况。

A NullPointerException(通常)发生是因为您的代码中存在一些错误。如果您希望抛出 NullPointerException,正确的解决方案是修复错误而不是处理异常。

  • 好吧,可以将用户输入和数据存储视为“环境”的一部分,因为它们在代码本身的逻辑之外。 (2认同)
  • @Yishai 让我用两句话总结一下。检查 - 客户端(调用者)必须采取恢复措施(环境或其他)未检查 - 编程错误 (2认同)