规避各种画蛇添足
1、将布尔变量和布尔值比较
没有必要将布尔变量和布尔值进行比较,应该确保在逻辑表达式中不出现"true"或"false"这两个布尔字面值:
代码清单 18 避免在逻辑表达式中出现布尔字面值
1. boolean success = init(); 2. if (success == true) //应该更正为if(success) 3. { 4. ... 5. } | 该审查内容对应于"Superfluous Content"下的"Equality Operations on Boolean Arguments"设置项。
2、无用的成员
类中private的成员方法和成员变量不可能在外部类中调用,JBuilder 2005 如果发现private的成员变量或方法并没有在内部的protect或public方法中使用,即这个成员永远不会在运行期得到引用,而成为一个无用的成员变量和方法。审查机制将其标识为未使用的成员,并予以报警。
代码清单 19 无用的成员
1. public class Unuse 2. { 3. private String name; 4. public Object value; 5. 6. private Object getValue() 7. { 8. return value; 9. } 10. 11. private void print() 12. { 13. System.out.println(getValue() + " = " + value); 14. } 15. } | 代码清单19中name变量,getValue()及print()方法都是无用的方法,因为不可能通过外面的类访问到这些成员,Unuse也没有提供调用这些成员的接口,所以这些成员都可以从类中清除。
该审查内容对应于"Superfluous Content"下的"Member is Not Used"设置项。
3、多余的接口修饰符
接口都是抽象的,接口中定义的方法都是抽象且公有,即public abstract;接口中的常量都是public static final的。所以如果在接口定义、接口成员方法及接口常量声明时使用了这些修饰符则是多余的,JBuilder 2005对此作出审查,并报告这些多余的修饰。
代码清单 20 多余的接口修饰符
1. interface Colors { 2. public static final int RED = 1; 3. public abstract void getColorName(int color); 4. } | 代码清单20中粗体的修饰符都是多余的,应该去掉。
这些审查内容可以通过"Superfluous Content"下的"Obsolete Interface Modifiers"和 "Unnecessary Member Modifier"审查项来设置。
4、不必要的强制类型转换
"小类型"到"大类型"及子类到父类自动进行类型转换,无需加上强制类型转换的操作符,JBuilder 2005检查出这些不必要的类型转换。
代码清单 21 不必要的类型转换
1. class Animal {} 2. class Elephant extends Animal { 3. void func () { 4. int i; 5. float f = (float) i; 6. 7. Elephant e1; 8. Elephant e2 = (Elephant) e1; 9. 10. Animal a; 11. Elephant e; 12. a = (Animal) e; 13. } 14. } | 代码清单21中粗体的强制类型转换语句都是没有必要的,应该取消强制类型转换。
该审查内容对应"Superfluous Content"下的"Unnecessary type Cast"审查项。
5、多余的import包引入
该审查项帮助你构建优化的import语句段,当程序文件中通过import语句引用java.lang.*(编译器自动引入)、当前类所在的包、以及未使用的包或者重复引入包时,JBuilder2005都将进行警告。
优先import包引入语句最方便方法即是在编辑器中点击右键,在弹出的菜单中选择"Format All"菜单项,自动优化import包引入程序段的代码。可以通过Project->Project Properties...->Java Formating->Import代码格式化设置项完成优化包引入的设置。
该审查内容对应"Superfluous Content"下的"Import List Construction"审查项。
其他
1、无作为的表达式
无作为的表达式表现在以下两个方面:
1) 比较表达式总是返回相同的值。
代码清单 22 表达式产生恒值
1. void handleEvent(Event e){ 2. if (e != null) { 3. ... 4. if (e = = null) { // 该表达式的值永远都是false,因为进入这个代码段的e恒为非空 5. ... 6. } 7. } 8. } 9. 10. void putChar(char c, boolean isLetter, boolean isDigit) { 11. if (isDigit) { 12. boolean isLetterOrDigit = isLetter || isDigit;//该表达式的值永远都是true 13. ... 14. } 15. } | 该审查内容对应"Expressions"下的"Comparison always produces the Same Result"和"Expression Value is Constant"两审查项。
2) 无效的算术运算。
当进行加法和减法运算时,有一个操作数是0。
当进行乘法运算时,乘法或被被乘数为1。
当进行除法运算时,除数为1。
当进行取模运算时,左边的操作数的绝对值比右边操作数的绝对值小,此时x%y=x。
属性赋值时,将本身的值赋给自己。
代码清单 23 无效的算术运算
1. public class NoEffect 2. { 3. private String name; 4. private int index; 5. 6. NoEffect(String n, int index) 7. { 8. this.name = name; //将属性值赋给本身 9. this.index = index; 10. } 11. 12. int getPosition() 13. { 14. int base = 0; 15. return index + base; //和0相同 16. } 17. 18. int getModule() 19. { 20. int x = 1, y = 2; 21. return x % y;//左边操作数绝对值比右边操作数的小 22. } 23. } | 该审查内容对应"Expressions"下的"Operation has No Effect"审查项。
2、流程控制中存在不可到达的语句
有些流程控制由于测试条件恒为false,则流程中的程序无法到达。
代码清单 24 不可至的语句
1. int[] arr = new int[size]; 2. if (arr == null) //由于arr不为空,则该测试逻辑不可能通过,程序无法进入该程序块中 3. { 4. return null; 5. } | 该审查内容对应"Branches and Loops"下的"Statement is Unreachable" 审查项。
3、无用的流程标签
循环中标注了语句标签,则没用任何地方使用这个标签,即该标签为无用标签,应予以去除。
代码清单 25 无用的流程标签
1. int findItem(Object[] list, Object item) { 2. loop: //程序中没有任何地方使用该标签 3. for (int i = 0; i < list.length; i++) { 4. if (list[i].equals(item)) { 5. eturn i; 6. } 7. } 8. return -1; 9. } | 该审查内容对应"Branches and Loops"下的"Label is Not Used" 审查项。
总结
JBuilder 2005提供了语法之上的代码审查功能,使用好代码审查功能不但可以增强程序代码的简洁性、可读性,还可以尽早发现潜在的编码错误,防患于未然。
JBuilder 2005代码审查功能无疑是一项开创性的工作,将对程序开发产生深远的影响,也是智能开发工具的一个发展方向。
”
|
|