Java:exception本身为null

我很困惑它自己的android问题或Java问题。

当我调试一个与蓝牙一起工作的android应用程序时,流停在IOException的catch块上,我后来发现exceptione为null ….当我尝试从InputStream读取时抛出它

是的,它不是NullPointerException而是其他types的exception – 更好的说抛出未初始化。

可能吗? 在哪种情况下可以抛出这种单元化exception?

一个例外是null ....它不是一个空指针异常

Related of "Java:exception本身为null"

可能吗? 在哪种情况下可以抛出这种单元化exception?

使用符合标准的Java编译器和符合条件的Java虚拟机,以及通过扩展符合的Davlik虚拟机,这是不可能的。 JLS不允许evariables在该位置为null

要么你有一个有缺陷的虚拟机,一个有缺陷的调试器,或者你的IDE,构建工具和/或进程有问题。

如果我遇到你的情况,我现在就停止使用调试器,然后再向你的代码添加老式的跟踪图。 并确保您从源代码执行干净且完整的构建。


您应该考虑的另一种可能性是JRE在运行时报告的行号(以及调试器所依赖的行号)与源代码中的行号不一致。 如果您在构建和部署过程中犯了错误,就可能发生这种情况。 错误可能是忘记保存文件,忘记构建,忘记部署新版本的应用程序或让IDE与文件系统不同步。


FWIW,理论是这是由throw null;引起的throw null; 或类似的东西没有水。 JLS第14.18节说:

“如果Expression的评估正常完成,产生一个空值,则创建类NullPointerException的实例V’并抛出而不是null。”

如果你在其上下文中阅读该句子,则更容易理解,但它清楚地说是throw null; 实际上会抛出NullPointerException


UPDATE

我在这个SO问题中find了另一个似是而非的解释: Exception总是为NULL

基本上,它表示模拟代码抛出Eclipse不知道的exception,并且Eclipse模拟器“有用”替换null 。 这听起来像是一个模拟器错误。

您可能被调试器愚弄了。

在该行下添加另一行代码(如if(false) log.v("",""); )之类的无用代码,在那里中断并检查exception的值。

另请尝试Log.e(TAG, "my null exception", e); 并阅读日志。

我不确定这是否是同样的问题,但我已经回答了类似的问题……如果你尝试从InputStream中读取它,那么请看看这个链接……

Android蓝牙连接问题

在Java中,您可以通过抛出null来抛出NullPointerException 。 在这种情况下,throwable最终将是NullPointerException

 public static void main(String[] args) { try{ a(null); } catch(Exception e) { System.out.println(e); e.printStackTrace(); } } public static void a(String[] args) { throw null; } 

输出:

 java.lang.NullPointerException java.lang.NullPointerException at scjp.Scjp.a(Scjp.java:18) at scjp.Scjp.main(Scjp.java:8)