What happens if NullPointerException is not handled in main() method?
在下面的示例代码片段中,在从check()方法隐式传播到main()方法后,main()方法中没有处理NullPointerException。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Simple { public static void main(String[] args) { check(26); } public static void check(int a) throws SQLException, IOException { if (a % 2 == 0) { throw new NullPointerException("it is divisible by 2"); //we are raising a Null pointer exception here } else if (a % 3 == 0) { throw new IOException("it is divisible by 3"); //we are raising a IO Exception here } else if (a % 5 == 0) { throw new SQLException("it is divisible by 5"); //we are raising a SQL Exception here } } } |
编译错误发生在
As we already know the Null pointer Exception is propagated implicitly without using throws keyword to main method
不必要。如果未处理,它将向上传播调用树到任何入口点。如果您通过
but is it necessary if it should be handled in the main method.
这取决于你所说的"必要"。如果不这样做,并且使用
通常的做法是不捕获
思想气垫船满鳗鱼是正确的,处理NPE通常是不好的做法。您可以处理它以及任何其他未经检查的异常。
1 2 3 4 5 6 |
您可以在此处阅读有关未经检查的例外情况
https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
您的代码有几个问题,它不会编译,因为:
你还没有在main方法中处理IOException,SQLException异常(抛出它们或用try catch包围它们)
这与NPE(空指针异常)无关,并且正如其他人所说的那样,编译器允许Null Pointer Exception,因为它是未经检查的异常。
首先:请注意,在实际代码中,您不会抛出相关的异常。
所有这些错误情况都应该抛出
抛出它时,通常意味着引发问题的实际代码存在问题。
但是我们应该抓住它吗?
实际上,它取决于必须应对的类/组件的视图点。
1)如果从抛出
所以我们不想抓住它。
2)在其他情况下,我们知道
因此,我们将"有风险"的代码括在
在运行时将抛出空指针异常,即使我们处理它也会传播它
此异常涉及数据