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

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

 2010-01-11 00:00:00 来源:WEB开发网   
核心提示: ArrayList 中最后一个元素已经被 remove 了,所以该位置已经没有任何东西,使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告(7),访问它将导致 java.lang.ArrayIndexOutOfBoundsException,总结:导致数组访问越界主要有以下

ArrayList 中最后一个元素已经被 remove 了,所以该位置已经没有任何东西,访问它将导致 java.lang.ArrayIndexOutOfBoundsException。

总结:导致数组访问越界主要有以下几个原因:

使用某个变量作为数组索引时,没有之前对该变量值进行检查,变量的取值可能会超出合法的数组索引范围,从而导致数组访问越界,如清单 7 。

使用与数组元素个数相同的值作为数组索引,因为数组的最后一个元素的索引是“数组大小 -1 ”,所以导致数组访问越界,如清单 8 。

数组初始化代码中某个不起眼的 if 之类的条件不成立或者 for/while循环的条件不成立,导致接下来的赋值动作并没有进行,从而接下来访问了未初始化完全的数组,导致数组访问越界,如清单 9 。

程序员编码时忘记 Vector,ArrayList 或 List 中某些位置的元素已经被 remove 了,后来仍然对该位置元素进行访问,可能会导致数组访问越界,如清单 10 。

建议的解决方法:在判断数组是否有效不为空的同时,也要对访问的数组元素的索引是否超出了上下限进行检查,如果索引是个变量,一定要确保变量取值在数组范围之类(反例是清单 7);如果索引不是个变量,在确保索引正确的同时还要确保之前定义的数组足够大(反例是清单 9)。最好是使用 try/catch 访问数组,并对数组访问越界异常进行捕获,进行特殊处理,如清单 11 。

清单 11 利用 try/catch 安全访问数组

 try { 
 // 访问数组 
 } 
 catch( IndexOutOfBoundsException e ) { 
 // 捕获数组访问越界的异常并做特殊处理 
 } 

除 0 错误

这是报出的 ERROR22 错误模式。在 Java 中,如果除数为 0,会导致 runtime 异常 java.lang.ArithmeticException 并终止程序运行,如清单 12 所示。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:使用 IBM 静态

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