Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>JBuilder>>JBuilder 2005 代码审查 (3)
JBuilder 2005 代码审查 (3)
2005-07-12   来源:陈雄华  作者:陈雄华
•  规避各种画蛇添足
•  将布尔变量和布尔值比较
<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 ”审查项来设置。

•  不必要的强制类型转换

<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 ”审查项。

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

<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 代码审查功能无疑是一项开创性的工作,将对程序开发产生深远的影响,也是智能开发工具的一个发展方向。

  --相关文章--
· 在JBuilder8中使用ANT (2007-04-13)
· JBuilder8新特性 (2007-04-13)
· JBuilder2005实现重构之重命名 (2005-08-23)
· JBuilder2005实现重构之升级到JDK5.0 (2005-08-23)
· JBuilder2005实现重构之对重构的支持 (2005-08-23)
· JBuilder2005实现重构之重构前的侦察 (2005-08-23)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接