使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告
2010-01-11 00:00:00 来源:WEB开发网清单 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 异常。
总结:导致传入空对象参数的原因通常是在传参前忘记对参数对象是否为空进行检查,或者调用了错误的方法,或者假定接下来传参的函数允许空对象参数。
建议的解决方法:如果函数的参数为对象,并且在函数体中需要操作该参数(如:访问参数对象的方法或域,试图修改参数对象的域等),一定要在函数开始处对参数是否为空对象进行判断,如果为空则不再执行函数体,并最好作特殊处理,达到避免操作空对象的目的。
数组访问越界
这是报出的 ERROR7 错误模式。什么是数组访问越界呢?如果一个数组(在 Java 中,Vector,ArrayList 和 List 也算是数组类型)定义为有 n 个元素,那么对这 n 个元素(0~n-1)的访问都是合法的,如果对这 n 个元素之外的访问,就是非法的,称为“越界”。这种错误同样不会造成编译错误,会危险地“埋伏”在你的程序中。在 C/C++ 中遇到数组访问越界,可导致程序崩溃,甚至宕机;在 Java 中,会抛出 runtime 异常 java.lang.ArrayIndexOutOfBoundsException 或 java.lang.IndexOutOfBoundsException,并终止程序运行。请看程序员容易犯的几个典型数组访问越界的例子:
清单 7. 越界访问 String 数组元素 1
更多精彩
赞助商链接