论坛首页 Java企业应用论坛

可恶的NullPointerException与JVM的失职

浏览 18602 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-20  
也与编程习惯有关。
比如经常字符串比较值的时侯
object.equals("")
为了避免空指针异常可以写成为:
"".equals(object)
0 请登录后投票
   发表时间:2008-11-20  
jeff.chuh 写道
你这样写的代码会很健壮,我现在也是尽量这么做的,但是大项目中往往控制不了别人怎么写代码。

这个是项目组的best practice.事实上在做类设计的时候,我们把每个方法抛什么Exception也写进去了(Javadoc)。coder必须得按设计写代码,要抛的Exception必须抛出来,不然任务就没完成。
0 请登录后投票
   发表时间:2008-11-20  
datuo 写道
也与编程习惯有关。
比如经常字符串比较值的时侯
object.equals("")
为了避免空指针异常可以写成为:
"".equals(object)


这个。。。
这个还用说?
0 请登录后投票
   发表时间:2008-11-20  
我只觉得如果jvm连NullpointerException都不放过的话, 实在会引起很多开发时候的麻烦。还是就这样好,至少简单。
0 请登录后投票
   发表时间:2008-11-21  
在未来的JDK7版本中,增加新特性a..b两个点引用如果a是null则不抛出空指针异常
0 请登录后投票
   发表时间:2008-11-21  
怎么会没有呢?耐心的把异常报告看完,肯定会看到自己程序部分的行号
0 请登录后投票
   发表时间:2008-11-21  
建议用apache的类判断文本:
StringUtils.isEmpty(str);
StringUtils.isNotEmpty(str);


利用Spring的Assert简化判断:
Assert.notNull(classA);
Assert.notNull(classB, "classB不能为空");
0 请登录后投票
   发表时间:2008-11-21  
jeff.chuh 写道
javaeyebird 写道
为什么必须要单独给NullPointerException加上“调用XXX时”呢?其他的Exception不需要加么?
因为从stack trace中就能得到方法调用的信息
try { ... } catch (Exception e) {
  log.debug(e); // 或者简单地e.printStackTrace()
}


只能得到某个方法执行到第几行的时候出现了NullPointerException,
而不知道那行代码究竟是什么,比如执行XX对象的XX方法这样的信息没有。

你是要得到运行时的某个xx对象么?怎么表示这个对象?
Foo@2342342么?照样不知道这个对象是哪个。。。
如果是说变量名,那从stack trace里看对应行的代码,就能看到诸如 a.foo(...),这就知道是a变量存放的对象执行Foo方法

如果要得到详细的stack运行时信息,那得利用jvm的debug接口,这可以用于各个异常,不是专门针对NullPointerException
0 请登录后投票
   发表时间:2008-11-21  
支持lz,虽然我觉得问题没那么严重,如果出现很多NullPointerException的话,
那应该考虑增加参数的检查,一般参数都是跟业务有关的,应该返回跟业务相关的错误代码,
而不应该要求jvm帮你处理了,业务相关的东西还是手工写吧。
jvm给的出错信息的确很不足,遇到NullPointerException的话jvm肯定是知道要调用哪个类的哪个方法,
完全可以把这些信息打印出来的,这根本就不会有速度上的影响。
而且使用的那个变量,如果有变量名的话完全可以给出变量名的。
0 请登录后投票
   发表时间:2008-11-21  
kaka2008 写道
datuo 写道
也与编程习惯有关。
比如经常字符串比较值的时侯
object.equals("")
为了避免空指针异常可以写成为:
"".equals(object)


这个。。。
这个还用说?

不喜欢这种写法,当然,这纯属个人爱好。
原因是:表义不明
面向对象的程序就应该用对象的角度写代码,
我们要测试的对象是object不是"",
我宁愿写成object!=null && object.equals("")
0 请登录后投票
论坛首页 Java企业应用版

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