使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告
2010-01-11 00:00:00 来源:WEB开发网建议的解决方法:一定要明确知道即将引用的对象是否是空对象。如果在某个方法中需要调用某个对象,而此对象又不是在本方法中定义(如:通过参数传递),这时就很难在此方法中明确知道此对象是否为空,那么一定要在调用此对象方法之前先判断其是否为空,如果不为空,然后再调用其方法,如:if( obj != null ) { obj.method() … }。
访问或修改空对象的域
定义了某个类的对象,在没有对其初始化之前就试图访问或修改其中的域,同样会导致 java.lang.NullPointerException 异常。这种情况也非常常见,举一个比较典型的数组对象的例子,如清单 3 所示:
清单 3. 访问未初始化数组的 length
String[] str = null;
int a = 0;
while( a > 0 ) {
str = new String[]{"developer", "Works"};
}
System.out.println( str.length );
数组 str 由于某些条件并没有被初始化,但是却访问其 public final 域 length 想得到其长度。
总结:访问或修改某个空对象的域的起因与调用空对象的方法类似,通常是由于某些特殊情况导致原本应该初始化的数组对象没有被初始化,从而接下来访问或修改其域时产生 java.lang.NullPointerException异常。
建议的解决方法:与调用空对象的方法类似,尽量在访问或修改某些不能够明确判断是否为空对象的域之前,对其进行空对象判断,从而避免对空对象的操作。
访问或修改空数组对象的数组元素
当某个数组为空时,试图访问或修改其数组元素时都会抛出 java.lang.NullPointerException 异常。
清单 4. 访问或修改空数组对象的数组元素
更多精彩
赞助商链接