快速业务通道

使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
么一定要在调用此对象方法之前先判断其是否为空,如 果不为空,然后再调用其方法,如: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异常。

建议的解决方法:与调用空对象的方法类似,尽量在访问或修改某些不能够明确判断是 否为空对象的域之前,对其进行空对象判断,从而避免对空对象的操作。

使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告(3)

时间:2011-05-07 IBM 丁钦浩

访问或修改空数组对象的数组元素

当某个数组为空时,试图访问或修改其数组元素时都会抛出 java.lang.NullPointerException 异常。

清单 4. 访问或修改空数组对象的数组元素

1  String[] str = null;   2  System.out.println( str[0]);   3  str[0] = "developerWorks" ;

第 2 行和第 3 行都会导致 ERROR2 错误,其中第 2 行试图访问空数组对象 str 的第 0 个元素,第 3 行试图给空数组对象 str 的第 0 个元素赋值。

总结:访问或修改某个空数组对象的数组元素的起因与调用空对象的方法类似,通常是 由于某些特殊情况导致原本应该初始化的数组对象没有被初始化,从而接下来访问或修改其 数组元素时产生 java.lang.NullPointerException 异常。

建议的解决方法:与调用空对象的方法类似,尽量在访问或修改某些不能够明确判断是 否为空空数组对象的数组元素之前,对其进行空对象判断,从而避免对空数组对象的操作。

同步空对象

清单 5. 同步空对象

String s = null;   int a = 0;   switch( a ) {    case 1: s = new String("developer");    case 2: s = new String("Works");    default:   ;   }   synchronized( s ){    ……   }

对空对象 s 进行同步。

总结:同步空对象的起因与调用空对象的方法类似,通常是由于某些特殊情况导致原本 应该初始化的对象没有被初始化,从而接下来导致同步空对象,并产生 java.lang.NullPointerException 异常。

建议的解决方法:与调用空对象的方法类似,尽量在同步某些不能够明确判断是否为空 的对象之前,对其进行空对象判断,从而避免对空对象的操作。

使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告(4)

时间:2011-05-07 IBM 丁钦浩

传入空对象参数

清单 6 传入空对象参数

static int getLength( String string ) {   return string.length();   }   public static void main(String[] args) {   String string = null;   int len = getLength( string );   }

将空 String 对象 string 传入 getLength 方法,从而导致在 getLength 方法内产生 java.lang.NullPointerException 异常。

总结:导致传入空对象参数的原因通常是在传参前忘记对参数对象是否为空进行检查, 或者调

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号