使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告 - 编程入门网
用了错误的方法,或者假定接下来传参的函数允许空对象参数。
建议的解决方法:如果函数的参数为对象,并且在函数体中需要操作该参数(如:访问 参数对象的方法或域,试图修改参数对象的域等),一定要在函数开始处对参数是否为空对 象进行判断,如果为空则不再执行函数体,并最好作特殊处理,达到避免操作空对象的目的 。 数组访问越界 这是报出的 ERROR7 错误模式。什么是数组访问越界呢?如果一个数组(在 Java 中, Vector,ArrayList 和 List 也算是数组类型)定义为有 n 个元素,那么对这 n 个元素( 0~n-1)的访问都是合法的,如果对这 n 个元素之外的访问,就是非法的,称为“越界”。 这种错误同样不会造成编译错误,会危险地“埋伏”在你的程序中。在 C/C++ 中遇到数组 访问越界,可导致程序崩溃,甚至宕机;在 Java 中,会抛出 runtime 异常 java.lang.ArrayIndexOutOfBoundsException 或 java.lang.IndexOutOfBoundsException ,并终止程序运行。请看程序员容易犯的几个典型数组访问越界的例子: 清单 7. 越界访问 String 数组元素 1
index 为 2,而数组只有两个元素,最后一个元素的下标索引是 1,所以导致数组访问 越界。注意,如果 index 为负数,仍然是数组访问越界。 清单 8. 越界访问 Vector
Vector 和 ArrayList 的起始索引是 0,所以用其数组大小作为索引会导致数组访问越 界,其数组最后一个元素的索引应该是“数组大小 -1 ”。 使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告(5)时间:2011-05-07 IBM 丁钦浩清单 9. 越界访问 String 数组元素 2
程序员调用 append 时以为数组 names 中有两个元素,其实只有一个。 清单 10. 越界访问 ArrayList
ArrayList 中最后一个元素已经被 remove 了,所以该位置已经没有任何东西,访问它 将导致 java.lang.ArrayIndexOutOfBoundsException。 总结:导致数组访问越界主要有以下几个原因: 使用某个变量作为数组索引时,没有之前对该变量值进行检查,变量的取值可能会超出 合法的数组索引范围,从而导致数组访问越界,如清单 7 。 使用与数组元素个数相同的值作为数组索引,因为数组的最后一个元素的索引是“数组 大小 -1 ”,所以导致数组访问越界,如清单 8 。 数组初始化代码中某个不起眼的 if 之类的条件不成立或者 for/while循环的条件不成 立,导致接下来的赋值动作并没有进行,从而接下来访问了未初始化完全的数组,导致数组 访问越界,如清单 9 。 程序员编码时忘记 Vector,ArrayList 或 List 中某些位 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |