【问题标题】:Null Pointer in catch block捕获块中的空指针
【发布时间】:2011-12-23 06:46:23
【问题描述】:

我正在使用 try catch 块来捕获异常。控制台显示它正在抛出一个空值。但它不会进入 catch 块。

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

如何处理。我也可以使用方法级别throws NullPointerException吗?

【问题讨论】:

  • 请发布堆栈跟踪并确定引发异常的行。
  • 奇怪!!为什么要处理空指针异常而空值应该通过对任何空值的厚脸皮值来处理
  • 控制台显示它正在抛出空值是什么意思?您的 println 不在 catch 块中。
  • 在真正的异常情况下使用异常。提供的代码显示不正确的异常用法。为什么不检查 SomeObject 是否为空?

标签: java nullpointerexception try-catch throws


【解决方案1】:

它确实会进入 catch 块内。该行还有另一个潜在的 NullPointerException(假设您想说)

so.setValue(); 

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

【讨论】:

  • 从声明SomeObject so = new SomeObject() 看来,SomeObject 是一个类名。这表明setValue() 是一个静态(类)函数。如果抛出 NPE,它将来自该函数内部,而不是来自该语句。
  • @TedHopp:同意。更正答案
【解决方案2】:

捕获 UnChecked Exceptions 是个坏主意,而不是捕获 NullPointerExcetpion,您可以在 If 条件中简单地检查空值。

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

【讨论】:

    【解决方案3】:

    你可以在 catch 里面放另一个 try 块

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-18
      • 2023-03-06
      • 1970-01-01
      • 2016-09-19
      • 2013-12-30
      • 1970-01-01
      • 2011-02-04
      相关资源
      最近更新 更多