这是接受采访时提出的问题。 NullPointerException
很常见;为什么它不被声明为已检查的例外?我用谷歌搜索,但没有得到正确的答案。
答案 0 :(得分:34)
几乎每种方法都必须声明抛出它。
public void myMethod(String param) throws NullPointerException {
//
}
(作为旁注 - 例如,只要有“潜在的空指针访问”,Eclipse会给你一个警告,这样你就可以尽早防止异常。)
答案 1 :(得分:15)
它不是一个经过检查的异常(除其他外)因为非常常见。它几乎可以在任何地方出现。如果已经检查过,那么每个单独的Java程序中的每个几乎都必须声明它throws NullPointerException
。
答案 2 :(得分:12)
空指针异常是运行时异常的扩展,因此在程序流中出现意外情况。期望抛出空指针异常是没有意义的(我希望!)因此你永远不会将它声明为已检查的异常。
答案 3 :(得分:3)
我要给出的一句话答案是它是编程错误的结果,编程错误异常不是检查异常(IllegalStateException,ClassCastException等)。
但是,即使你有一个争论,为什么它应该是一个检查异常,基本上每个对象引用的操作都可以抛出它,所以它将遍布所有地方,并且字面上非平凡程序中的每个方法都会不得不抛弃它 - 那么重点是什么?
答案 4 :(得分:3)
由于环境中某些程序很少或根本无法控制的内容出错(例如IOException
,SQLException
),因此可能会出现已检查的异常。你可以预见并处理这种情况。
发生NullPointerException
(通常),因为您的代码中存在一些错误。 如果您希望抛出NullPointerException,正确的解决方案是修复错误而不是处理异常。
答案 5 :(得分:2)
我自己对已检查异常的强制性定义。 已检查的异常是API在出现已知的不良情况时会引发的异常
NullPointerException
s并不表示“已知不良”情况。相反,由于代码中存在一些无法处理的情况,通常会抛出这些内容。也就是说,它们大部分时间都是由于编码实践不好 - 例如尝试获取未正确初始化的列表的大小等等。因此,将它们设置为检查异常是没有意义的 - 因为Java中的每个对象都可以为null在某一点?!。永远不应该抓住NullPoitnerException。
答案 6 :(得分:1)
已检查的例外仅适用于程序可以恢复的例外情况。在NULL对象上调用某些东西是程序员的问题,无法恢复。
答案 7 :(得分:0)
为什么在您编写的每个函数都必须声明它时包括它?只是为了让你的生活变得简单。
答案 8 :(得分:0)
如果发生空指针异常,程序将暂停。因此它是未经检查的异常。