当前页面: 开发资料首页 → JBuilder 专题 → JBuilder 2005 代码审查 (3)
摘要: JBuilder 2005 代码审查 (3) • 规避各种画蛇添足 • 将布尔变量和布尔值比较 on error resume next ShockMode = (IsObje...
|
没有必要将布尔变量和布尔值进行比较,应该确保在逻辑表达式中不出现“ 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 ”审查项来设置。
|
“小类型”到“大类型”及子类到父类自动进行类型转换,无需加上强制类型转换的操作符, 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 语句引用 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 ”审查项。
|
有些流程控制由于测试条件恒为 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 代码审查功能无疑是一项开创性的工作,将对程序开发产生深远的影响,也是智能开发工具的一个发展方向。