熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JAVA規則 基本篇

2013-11-15 11:42:02  來源: JSP教程 

  本文介紹的JAVA規則的說明分為個級別級別是最基本也是最重要的級別在今後將陸續寫出其他的規則遵守了這些規則可以提高程序的效率使代碼有更好的可讀性等
  
  () 避免使用NEW關鍵字來創建String對象
  把一個String常量copy到String 對象中通常是多余浪費時間的
  Public class test{
  Public void method(){
  Systemoutprint (str);
  }
  private String str = new String (); //這裡新建對象是完全沒有必要的
  private String str= //正確的應該如此
  }
  參考Joshua Bloch: Effective Java Programming Language Guide
  
  () 避免使用不必要的嵌套
  過多的嵌套會使你的代碼復雜化減弱可讀性
  Public class test {
  String add (){
  Int c=(a=a+b)+b; //過於復雜
  Return c
  }
  
  }
  
  參考#
  
  () 避免在同一行聲明不同類型的多個變量
  這樣可以使程序更加清晰避免混亂
  private int index index[];
  正確的應該如此
  private int index;
  private int index[];
  
  參考#
  
  () 在每一行裡寫一條語句
  這條規則不包括for語句比如for (int i = ; i < ; i++) x;可以增加代碼的可讀性
  public class OSPL {
  int method (int a int b) {
  int i = a + b; return i; // 可讀性不強
  }
  正確的
  public class OSPLFixed {
  int method (int a int b) {
  int i = a + b;
  return i;
  }
  }
  參考Section of #
  
  ()經常從finalize ()中調用superfinalize ()
  這裡的finalize ()是java在進行垃圾收集的時候調用的和finally不一樣如果你的父類沒有定義finally()的話你也應該調用這裡有兩個原因)在不改變代碼的情況下能夠將父類的finally方法加到你的類中)以後你會養成習慣調用父類的finally方法即使父類沒有定義finally方法的時候
  正確的方法應該如此
  public class parentFinalize {
  protected void finalize () throws Throwable {
  superfinalize(); // FIXED
  }
  
  參考The Java Programming Language by Ken Arnold and James Gosling page
  
  () 不要在finalize ()中注銷listeners
  不要再finalize ()方法中中注銷listenersfinalize ()只有再沒有對象引用的時候調用如果listeners從finalize()方法中去除了被finalize的對象將不會在垃圾收集中去除
  public void finalize () throws Throwable {
  bButtonremoveActionListener (act);
  }
  
  () 不要顯式的調用finalize ()方法
  雖然顯式的調用這個方法可以使你確保你的調用但是當這個方法收集了以後垃圾收集會再收集一次
  
   public class T {
    public void finalize() throws Throwable {
      close_resources ();
      superfinalize ();  }
    public void close_resources()
   {}
  }
  class Test {
    void cleanup () throws Throwable {
      tfinalize(); // 調用
      t = null;  }
    private t = new T ();
  }
  
  對於這樣的調用我們應該自己創建一個釋放的方法做最初finalize ()所作的事情當你每次想顯式的調用finalize ()的時候實際上調用了釋放方法然後再使用一個判斷字段來確保這個方法只執行一次以後再調用就沒關系了
  
  public class T {
    public synchronized void release () throws Throwable{
      if (!_released) {
        close_resources ();
   // do what the old finalize () did
        _released = true;
      }
    }
    public void finalize ()
   throws Throwable {
      release ();
      superfinalize ();
    }
    public void close_resources()
   {}
    private boolean _released = false;}class TestFixed {
    void closeTest () throws Throwable {
      t release (); // FIXED
      t = null;
    }
    private T t = new T ();}
  
  
  參考Nigel Warren Philip Bishop: Java in Practice Design Styles and Idioms
  for Effective Java AddisonWesley pp
  
  
  ()不要使用不推薦的API
  盡量使用JDK推薦的API在類和方法或者java組件裡有很多方法是陳舊的或者是可以選擇的有一些方法SUN用了deprecated標記最好不要使用例如
  private List t_list = new List ();
  t_listaddItem (str);
  如果查一下javadoc的話會發現建議用add()來代替addItem()
  參考
  
  ()為所有序列化的類創建一個serialVersionUID
  可以避免從你各種不同的類破壞序列的兼容性如果你不特別制訂一個UID的話那麼系統為自動產生一個UID(根據類的內容)如果UID在你新版本的類中改變了即使那個被序列化的類沒改變你也不能反序列化老的版本了
  
  public class DUID implements javaioSerializable {   public void method () {}}
  在裡面加一個UID當這個類的序列化形式改變的時候你也改變這個UID就可以了
  
  public class DUIDFixed implements javaioSerializable {
    public void method ()
   {}
    private static final long serialVersionUID = ; }
  
  參考Joshua Bloch: Effective Java Programming Language Guide
  Addison Wesley pp
  
  ()對於private常量的定義
  比較好的做法是對於這樣的常量加上final標記這樣的常量從初始化到最後結束值都不會改變
  private int size = ;
  改變後的做法是
  private final int size = ;
  
  ()避免把方法本地變量和參數定義成和類變量相同的名字
  這樣容易引起混擾建議把任何的變量字都定義成唯一的這樣看來SCJP裡的那些題目在現實中就用不到了
  
  public void method (int j) {  final int i = ; // VIOLATION  }  private int j = ;
  
  建議
  
  public void method (int j) {  final int i = ; // VIOLATION  }  private int j = ;
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19457.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.