论坛首页 Java企业应用论坛

可恶的NullPointerException与JVM的失职

浏览 18616 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-19   最后修改:2008-11-19
由于程序的不严密而出现NullPointerException异常的代码太常见了,
虽然可以在使用对象前检查是否为空,但过多的这种检查会使代码臃肿。
出现这样的异常的时候常常没有明确的信息,给调试带来不便,
即使知道抛出异常的代码行号,但或许因为你手头没有代码,或许因为这行代码有多次方法调用,
而很难得到错误的原因或是判断究竟什么对象是空。

我觉得这是JVM的失职,它只是抛出了没有任何信息的NullPointerException,
为什么不追加“调用XXX方法时,发现对象不可用”的信息呢
   发表时间:2008-11-19  
性能下降30%的代价你能负担么?
0 请登录后投票
   发表时间:2008-11-19  
会差那么多吗,类加载后在常量池中不是保存有方法的名称吗。
0 请登录后投票
   发表时间:2008-11-19  
你所有设计引用指针的方法都要做这个检查。
这就和当年vector一个问题了不是。
0 请登录后投票
   发表时间:2008-11-19  
repsihWDX 写道
你所有设计引用指针的方法都要做这个检查。
这就和当年vector一个问题了不是。


我不是说在自己的代码中追加检查,
而是说JVM检查到调用空对象方法的时候只是抛出了没有任何信息的NullPointerException
这样对调试非常不利,
JVM是否应该追加一些信息。
0 请登录后投票
   发表时间:2008-11-19  
已然有堆栈冒泡出来了。。你还需要堆栈给你什么信息?
你打印堆栈就能看到清晰的调用树了啊。。
0 请登录后投票
   发表时间:2008-11-19  
我在1楼已经写清楚了,
“但或许因为你手头没有代码,或许因为这行代码有多次方法调用”
那么你将不知道是什么对象为空
0 请登录后投票
   发表时间:2008-11-19  
对象是null,没有带类型信息,jvm恐怕也没办法给出是什么对象。
在很多需要判断null地方,最好还是采用Null Object模式
0 请登录后投票
   发表时间:2008-11-19  
dennis_zane 写道
对象是null,没有带类型信息,jvm恐怕也没办法给出是什么对象。
在很多需要判断null地方,最好还是采用Null Object模式


对象类型是无法给出了,不过调用的方法名我想应该有办法得到,
多谢提供Null Object模式的信息。
0 请登录后投票
   发表时间:2008-11-19  
还是不太理解你的问题。
NullpointerException
堆栈中肯定包含了对应的对应方法调用信息的啊。。。最后会深入到哪一行的啊。虽然jsp这样的没法调试,但写java代码行标识还是很准确的吧。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics