WEB开发网
开发学院软件开发Java 使用 IBM 静态工具优化 Java 代码,第 2 部分: 分... 阅读

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

 2010-01-11 00:00:00 来源:WEB开发网   
核心提示: 这是最典型的调用空对象方法的例子,调用一个未初始化的 String 对象的 chatAt() 方法,使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告(2),清单 2. 调用未初始化数组成员的方法Integer[]array=null;try{array=newIntege

这是最典型的调用空对象方法的例子,调用一个未初始化的 String 对象的 chatAt() 方法。

清单 2. 调用未初始化数组成员的方法

 Integer[] array = null; 
 try{ 
   array = new Integer[] { new Integer(2/0), new Integer(3), new Integer(4) }; 
 } catch ( Exception e ) { 
   //Do nothing here 
 } 
 int i = array[0].intValue(); 

数组 array 的三个 Integer 成员因为除数为 0 的异常并没有被初始化(这里只是用典型的除数为 0 的异常举例,其实实际工程中,初始化时发生的异常有时很难被发现,没有如此明显),但是接下来仍然调用其第 0 个成员的 intValue() 方法。

总结:调用空对象方法的错误非常常见,导致其出现的原因通常有两点:

在某个方法开始处定义了空对象,程序员准备在其后的代码中对其进行初始化,初始化完毕后再调用该对象的方法。但是有时由于初始化代码中的某个不常见的 if 之类的条件不成立或者 for/while 循环的条件不成立,导致接下来的赋值动作并没有进行,其结果就是之前定义的空对象并没有被初始化,然后又调用该对象的方法,从而造成了 java.lang.NullPointerException,如清单 1 所示。

初始化对象时出现了异常,但是没有对异常进行特殊处理,程序接下来继续运行,导致最终调用了该空对象的方法,如清单 2 所示。

这种代码缺陷在大型代码工程中往往很难被发现,因为编译器不会报错,而且代码在实际运行中,可能 99% 的时候 if 条件都是满足的,初始化也是成功的,所以程序员很难在测试中发现该问题,但是这种代码一旦交付到用户手中,发现一次就是灾难性的。

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 IBM 静态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接