在 catch 块中的空指针异常

4

我正在使用try catch块来捕获异常。控制台显示它抛出了一个null值。但是它没有进入catch块。

try {
        System.out.println("Exception here "+SomeObject.getValue());
    } catch (NullPointerException e) {
        // TODO: handle exception
        SomeObject so = new SomeObject();
    }
    SomeObject.setValue(); 
}

这个该如何处理呢?我可以使用方法级别的throws NullPointerException吗?


2
请发布堆栈跟踪并确定抛出异常的行。 - Ted Hopp
1
奇怪!!为什么要处理空指针异常,而不是通过检查值来处理任何空值。 - Umesh Awasthi
你的意思是控制台显示抛出了空值?你的println不在catch块中。 - user949300
在真正的异常情况下使用异常。提供的代码展示了错误的异常使用方式。为什么不直接检查SomeObject是否为空? - Slava Semushin
3个回答

3

确实会进入catch块。在该行存在另一个可能的NullPointerException(假设你是想要表达这个意思)。

so.setValue(); 

话虽如此,不建议抛出RuntimeException。最好通过简单的条件检查在代码中处理NullPointerException,而不是通过try/catch。


从语句 SomeObject so = new SomeObject() 可以看出 SomeObject 是一个类名。这表明 setValue() 是一个静态(类)函数。如果抛出了 NPE,则是从该函数内部而不是从此语句中抛出的。 - Ted Hopp
@TedHopp:同意。已更正答案。 - bragboy

0

捕获未检查的异常是一个不好的想法,与其捕获NullPointerException,你可以在if条件语句中简单地检查null值。

if(SomeObject.getValue()!=null)
System.out.println(SomeObject.getValue());

0

你可以在 catch 块中嵌套另一个 try 块

try {
    doSomething();
} catch (IOException) {
         try {
                  doSomething();
         } catch (IOException e) {
                 throw new ApplicationException("Failed twice at doSomething" +
                 e.toString());
         }          
} catch (Exception e) {
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接