显然这是一个简化的例子,但它说明了我的观点。我正在使用第三方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。也许这是他们最终的问题。
答案 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表示e
是NullPointerException