ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]JBuilder 2005 代码审查 (3)

[转载]JBuilder 2005 代码审查 (3)

原创 Linux操作系统 作者:dinner1007 时间:2019-04-02 09:12:05 0 删除 编辑
JBuilder 2005 代码审查 (3)
• 规避各种画蛇添足 • 将布尔变量和布尔值比较
Click here to find out more! on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <a href="http://ad.cn.doubleclick.net/click%3Bh=v5|32b3|3|0|%2a|g%3B18281736%3B0-0%3B0%3B6694709%3B31-1|1%3B11148086|11165982|1%3B%3B%7Esscs%3D%3fhttp%3a%2f%2fwww.site.com" target="_blank"><IMG SRC="http://ad.cn.doubleclick.net/123456/banner.gif" WIDTH=468 HEIGHT=60 BORDER=0 ></a>

没有必要将布尔变量和布尔值进行比较,应该确保在逻辑表达式中不出现“ true ”或“ false ”这两个布尔字面值:

代码清单 18 避免在逻辑表达式中出现布尔字面值

• boolean success = init();

if (success == true) // 应该更正为 if(success)

• {

• ...

• }

该审查内容对应于“ Superfluous Content ”下的“ Equality Operations on Boolean Arguments ”设置项。

• 无用的成员

类中 private 的成员方法和成员变量不可能在外部类中调用, JBuilder 2005 如果发现 private 的成员变量或方法并没有在内部的 protect 或 public 方法中使用,即这个成员永远不会在运行期得到引用,而成为一个无用的成员变量和方法。审查机制将其标识为未使用的成员,并予以报警。

代码清单 19 无用的成员

• public class Unuse

• {

private String name;

• public Object value;

private Object getValue()

{

return value;

}

private void print()

{

System.out.println(getValue() + " = " + value);

}

• }

代码清单 19 中 name 变量, getValue() 及 print() 方法都是无用的方法,因为不可能通过外面的类访问到这些成员, Unuse 也没有提供调用这些成员的接口,所以这些成员都可以从类中清除。

该审查内容对应于“ Superfluous Content ”下的“ Member is Not Used ”设置项。

• 多余的接口修饰符

接口都是抽象的,接口中定义的方法都是抽象且公有,即 public abstract ;接口中的常量都是 public static final 的。所以如果在接口定义、接口成员方法及接口常量声明时使用了这些修饰符则是多余的, JBuilder 2005 对此作出审查,并报告这些多余的修饰。

代码清单 20 多余的接口修饰符

interface Colors {

public static final int RED = 1;

public abstract void getColorName(int color);

• }

代码清单 20 中粗体的修饰符都是多余的,应该去掉。

这些审查内容可以通过“ Superfluous Content ”下的“ Obsolete Interface Modifiers ”和 “ Unnecessary Member Modifier ”审查项来设置。

• 不必要的强制类型转换

Click here to find out more! on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <a href="http://ad.cn.doubleclick.net/click%3Bh=v5|32b3|3|0|%2a|g%3B18281736%3B0-0%3B0%3B6694709%3B31-1|1%3B11148086|11165982|1%3B%3B%7Esscs%3D%3fhttp%3a%2f%2fwww.site.com" target="_blank"><IMG SRC="http://ad.cn.doubleclick.net/123456/banner.gif" WIDTH=468 HEIGHT=60 BORDER=0 ></a>

“小类型”到“大类型”及子类到父类自动进行类型转换,无需加上强制类型转换的操作符, JBuilder 2005 检查出这些不必要的类型转换。

代码清单 21 不必要的类型转换

• class Animal {}

• class Elephant extends Animal {

• void func () {

• int i;

float f = (float) i;

• Elephant e1;

Elephant e2 = (Elephant) e1;

• Animal a;

• Elephant e;

a = (Animal) e;

• }

• }

代码清单 21 中粗体的强制类型转换语句都是没有必要的,应该取消强制类型转换。

该审查内容对应“ Superfluous Content ”下的“ Unnecessary type Cast ”审查项。

• 多余的 import 包引入

该审查项帮助你构建优化的 import 语句段,当程序文件中通过 import 语句引用 java.lang.* (编译器自动引入)、当前类所在的包、以及未使用的包或者重复引入包时, JBuilder2005 都将进行警告。

优先 import 包引入语句最方便方法即是在编辑器中点击右键,在弹出的菜单中选择“ Format All ”菜单项,自动优化 import 包引入程序段的代码。可以通过 Project->Project Properties...->Java Formating->Import 代码格式化设置项完成优化包引入的设置。

该审查内容对应“ Superfluous Content ”下的“ Import List Construction ”审查项。

• 其他 • 无作为的表达式

无作为的表达式表现在以下两个方面:

• 比较表达式总是返回相同的值。

代码清单 22 表达式产生恒值

• void handleEvent(Event e){

• if (e != null) {

• ...

if (e = = null) { // 该表达式的值永远都是 false ,因为进入这个代码段的 e 恒为非空

• ...

• }

• }

• }

• void putChar(char c, boolean isLetter, boolean isDigit) {

• if (isDigit) {

boolean isLetterOrDigit = isLetter || isDigit;// 该表达式的值永远都是 true

• ...

• }

• }

该审查内容对应“ Expressions ”下的“ Comparison always produces the Same Result ”和“ Expression Value is Constant ”两审查项。

• 无效的算术运算。

• 当进行加法和减法运算时,有一个操作数是 0 。

• 当进行乘法运算时,乘法或被被乘数为 1 。

• 当进行除法运算时,除数为 1 。

• 当进行取模运算时,左边的操作数的绝对值比右边操作数的绝对值小,此时 x % y=x 。

• 属性赋值时,将本身的值赋给自己。

代码清单 23 无效的算术运算

• public class NoEffect

• {

• private String name;

• private int index;

• NoEffect(String n, int index)

• {

this.name = name; // 将属性值赋给本身

• this.index = index;

• }

• int getPosition()

• {

• int base = 0;

return index + base; // 和 0 相同

• }

• int getModule()

• {

• int x = 1, y = 2;

return x % y;// 左边操作数绝对值比右边操作数的小

• }

• }

该审查内容对应“ Expressions ”下的“ Operation has No Effect ”审查项。

• 流程控制中存在不可到达的语句

Click here to find out more! on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <a href="http://ad.cn.doubleclick.net/click%3Bh=v5|32b3|3|0|%2a|g%3B18281736%3B0-0%3B0%3B6694709%3B31-1|1%3B11148086|11165982|1%3B%3B%7Esscs%3D%3fhttp%3a%2f%2fwww.site.com" target="_blank"><IMG SRC="http://ad.cn.doubleclick.net/123456/banner.gif" WIDTH=468 HEIGHT=60 BORDER=0 ></a>

有些流程控制由于测试条件恒为 false ,则流程中的程序无法到达。

代码清单 24 不可至的语句

• int[] arr = new int[size];

if (arr == null) // 由于 arr 不为空,则该测试逻辑不可能通过,程序无法进入该程序块中

• {

• return null;

• }

该审查内容对应“ Branches and Loops ”下的“ Statement is Unreachable ” 审查项。

• 无用的流程标签

循环中标注了语句标签,则没用任何地方使用这个标签,即该标签为无用标签,应予以去除。

代码清单 25 无用的流程标签

• int findItem(Object[] list, Object item) {

loop: // 程序中没有任何地方使用该标签

• for (int i = 0; i < list.length; i++) {

• if (list[i].equals(item)) {

• return i;

• }

• }

• return -1;

• }

该审查内容对应“ Branches and Loops ”下的“ Label is Not Used ” 审查项。

• 总结

JBuilder 2005 提供了语法之上的代码审查功能,使用好代码审查功能不但可以增强程序代码的简洁性、可读性,还可以尽早发现潜在的编码错误,防患于未然。

JBuilder 2005 代码审查功能无疑是一项开创性的工作,将对程序开发产生深远的影响,也是智能开发工具的一个发展方向。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-131360/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    1079
  • 访问量
    785206