Java代码缺陷自动分析工具介绍(2)

发布时间:2021-06-08

Java代码缺陷自动分析工具介绍

见例子是在调用 String 方法时,例如:

1 String aString = "bob";

2 b.replace('b', 'p');

3 if(b.equals("pop"))

这个错误很常见。在第 2 行,程序员认为他已经用 p 替换了字符串中的所有 b。确实是这样,但是他忘记了字符串是不可变的。所有这类方法都返回一个新字符串,而从来不会改变消息的接收者。

2.3 检测:Null 指针对 null 的解引用(dereference)和冗余比较

这个检测器查找两类问题。它查找代码路径将会或者可能造成 null 指针异常的情况,它还查找对 null 的冗余比较的情况。例如,如果两个比较值都为 null,那么它们就是冗余的并可能表明代码错误。FindBugs 在可以确定一个值为 null 而另一个值不为 null 时,检测类似的错误,例如:

1 Person person = aMap.get("bob");

2 if (person != null) {

3 person.updateAccessTime();

4 }

5 String name = person.getName();

在这个例子中,如果第 1 行的 Map 不包括一个名为“bob”的人,那么在第 5 行询问 person 的名字时就会出现 null 指针异常。因为 FindBugs 不知道 map 是否包含“bob”,所以它将第 5 行标记为可能 null 指针异常。

2.4 检测:初始化之前读取字段

这个检测器寻找在构造函数中初始化之前被读取的字段。这个错误通常是由使用字段名而不是构造函数参数引起的,例如在构造函数中读取未初始化的字段:

1 public class Thing {

2 private List actions;

3 public Thing(String startingActions) {

4 StringTokenizer tokenizer = new StringTokenizer(startingActions); 5 while (tokenizer.hasMoreTokens()) {

6 actions.add(tokenizer.nextToken());

7 }

8 }

9 }

在这个例子中,第 6 行将产生一个 null 指针异常,因为变量 actions 还没有初始化。

Java代码缺陷自动分析工具介绍(2).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219