为什么这个例外为空?

时间:2014-03-17 22:53:11

标签: java android exception try-catch

显然这是一个简化的例子,但它说明了我的观点。我正在使用第三方SDK并遇到这种情况,我可以使用以下代码重现它。

try {
    java.util.List<java.lang.String> nullList;
    nullList = null;

    for(java.lang.String s : nullList){}
}
catch(Exception e){
        e.printStackTrace();
}

此代码将抛出一个被捕获的异常,但e始终为null。这是为什么?

更新
我将代码复制到新方法,e不再为空。因为我正在使用IntelliJ,所以我将跟进JetBrains。也许这是他们最终的问题。

4 个答案:

答案 0 :(得分:1)

如果您引用了catch块中捕获的异常,则它不可能为null,但其消息可以为null。

答案 1 :(得分:1)

它实际上不是null,在运行代码时它确实给了我以下的栈跟踪

java.lang.NullPointerException
    at Trialstuff.main(Trialstuff.java:7)

答案 2 :(得分:1)

e不为null,将 e.printStackTrace()替换为:

System.out.println(e==null);

这将告诉您非空,将打印 false

e java.lang.NullPointerException ,不要与null混淆

答案 3 :(得分:0)

发生异常的for循环等同于

List list = nullList;
for (Iterator iterator = nullList.iterator(); iterator.hasNext();) {
    s = (String)iterator.next();
}

在尝试访问NPE变量的null方法时,应该抛出iterator而不是nullList

Ideone demo表示eNullPointerException