Dreamweaver FrontPage HTML/CSS Javascript 
Google adsense申请技巧本站核心代理域名注册主机业务 快速发布你的买卖域名买卖网站信息 1元注册 cn域名
站长每日新闻导读 √ ·推荐万网空间¥120元 150m 站长网:站长必上的网站网站联盟大全本站代理万网域名55空间120元
 2007-6-16 10:38:33

实现高效Java编程规范的十一条基础规则

来源: 字体:[ ]


  (7) 不要显式的调用finalize ()方法

  虽然显式的调用这个方法可以使你确保你的调用,但是当这个方法收集了以后垃圾收集会再收集一次。

  public class T7 {

   public void finalize() throws Throwable {

    close_resources ();

    super.finalize ();

   }

   public void close_resources() {}

  }

  class Test {

   void cleanup () throws Throwable {

    t71.finalize(); // 调用

    t71 = null;

   }

   private t71 = new T7 ();

  }
  对于这样的调用我们应该自己创建一个释放的方法,做最初finalize ()所作的事情,当你每次想显式的调用finalize ()的时候实际上调用了释放方法。然后再使用一个判断字段来确保这个方法只执行一次,以后再调用就没关系了。

  public class T7 {

   public synchronized void release () throws Throwable{

    if (!_released) {

     close_resources (); // do what the old 'finalize ()'

     did _released = true;

    }

   }

   public void finalize () throws Throwable {

    release ();

    super.finalize ();

   }

   public void close_resources() {}

   private boolean _released = false;

  }

  class TestFixed {

   void closeTest () throws Throwable {

    t71 .release (); // FIXED

    t71 = null;

   }

   private T7 t71 = new T7 ();

  }

  (8)不要使用不推荐的API

  尽量使用JDK1.3推荐的API。在类和方法或者java组件里有很多方法是陈旧的或者是可以选择的。有一些方法SUN用了"deprecated“标记。最好不要使用例如:

  private List t_list = new List ();

  t_list.addItem (str);

  如果查一下javadoc的话,会发现建议用add()来代替addItem()。

  (9)为所有序列化的类创建一个'serialVersionUID'

  可以避免从你各种不同的类破坏序列的兼容性。如果你不特别制订一个UID的话,那么系统为自动产生一个UID(根据类的内容)。如果UID在你新版本的类中改变了,即使那个被序列化的类没改变,你也不能反序列化老的版本了。

  public class DUID implements java.io.Serializable { public void method () {}}

  在里面加一个UID,当这个类的序列化形式改变的时候,你也改变这个UID就可以了。

  public class DUIDFixed implements java.io.Serializable {

   public void method () {}

   private static final long serialVersionUID = 1;

  }

  (10)对于private常量的定义

  比较好的做法是对于这样的常量,加上final标记,这样的常量从初始化到最后结束值都不会改变。

  private int size = 5;

  改变后的做法是:

  private final int size = 5;

  (11)避免把方法本地变量和参数定义成和类变量相同的名字

  这样容易引起混扰,建议把任何的变量字都定义成唯一的。这样看来,SCJP里的那些题目在现实中就用不到了:)

  public void method (int j) { final int i = 5; // VIOLATION } private int j = 2;

  建议:

  public void method (int j1) { final int i = 5; // VIOLATION } private int j = 2;

 

网站地图 - 域名注册续费虚拟主机代理 - 交易论坛 - 网站投稿 - 广告服务 - 帮助中心 - 联系我们
Copyright ©2003-2007 www.Admin5.com All Rights Reserved