import java.io.*;
import java.io.IOException;
public class NullPointerExceptionExample1 {
public static void main(String... args)throws NullPointerException {
String s=new String("Hello");
s=null;
System.out.println(s.length());
}
}
我故意尝试引发NullPointerException,并且我已经指出了我将要使用的异常情况(抛出NullPointerException)。但是我的代码仍显示错误(NullPointerException)
答案 0 :(得分:3)
将方法声明为throws NullPointerException
这一事实意味着它可以抛出该异常。在这种特殊情况下它没有意义,因为NullPointerException
是一个未经检查的异常(它是RuntimeException
的子类,即使没有该throws子句也可以通过您的方法抛出) 。
无论如何,在throws子句中声明异常并不能防止它被抛出而且无法捕获它,所以我不明白为什么你期望NullPointerException
不要被抛出当s.length
为空时,NullPointerException
总会抛出s
。
答案 1 :(得分:1)
(1)没有必要在NullPointerException
子句中指定任何运行时异常(例如throws
)。
(2)throws
子句只是警告该方法可能抛出异常;它并没有神奇地使触发异常的错误消失。您尝试在空引用上调用.length()
,因此您获得了异常;你期望发生什么呢?
答案 2 :(得分:1)
我认为你想要的是一个try / catch组合。您声明throws NullPointerException
这一事实并不意味着不会发生任何异常您只是让任何调用对象知道可能发生此类错误并应该处理它。这是一个try / catch。
import java.io.*;
import java.io.IOException;
public class NullPointerExceptionExample1 {
public static void main(String... args) {
String s=new String("Hello");
s=null;
try{
System.out.println(s.length());
} catch (NullPointerException e){
// handle error here
System.out.println("Caught NullPointerException");
}
}
}