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

Java 程序編碼規范與技巧

2013-11-23 17:54:51  來源: Javascript 

  java 程序編碼規范
  命名規范
  定義這個規范的目的是讓項目中所有的文檔都看起來像一個人寫的增加可讀性減少項目組中因為換人而帶來的損失(這些規范並不是一定要絕對遵守但是一定要讓程序有良好的可讀性)
  Package 的命名
   Package 的名字應該都是由一個小寫單詞組成
  Class 的命名
  Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成 Class
  變量的命名
  變量的名字必須用一個小寫字母開頭後面的單詞用大寫字母開頭
  Static Final 變量的命名
  Static Final 變量的名字應該都大寫並且指出完整含義
  參數的命名
  參數的名字必須和變量的命名規范一致
  數組的命名
  數組應該總是用下面的方式來命名
  byte[] buffer;
  而不是 byte buffer[];
  方法的參數
  使用有意義的參數命名如果可能的話使用和要賦值的字段一樣的名字
  SetCounter(int size){
  thissize = size;
  }
  Java 文件樣式
  所有的 Java(*java) 文件都必須遵守如下的樣式規則
  版權信息
  版權信息必須在 java 文件的開頭比如
  /** * Copyright ? Shanghai XXX Co Ltd
  * All right reserved
  */
  其他不需要出現在 javadoc 的信息也可以包含在這裡
  Package/Imports package 行要在 import 行之前
  import 中標准的包名要在本地的包名之前而且按照字母順序排列
  如果 import 行中包含了同一個包中的不同子目錄則應該用 * 來處理
  package stats;
  import javaio*;
  import javautilObservable;
  import hotlavautilApplication;
  這裡 javaio* 使用來代替InputStream and OutputStream 的
  Class 接下來的是類的注釋一般是用來解釋類的
  /** * A class representing a set of packet and byte counters
  * It is observable to allow it to be watched but only
  * reports changes when the current set is complete
  */
  接下來是類定義包含了在不同的行的 extends 和 implements public class
  CounterSet extends Observable
  implements Cloneable Class Fields
  接下來是類的成員變量
  /** * Packet counter
  */
  protected int[] packets;
  public 的成員變量必須生成文檔(JavaDoc)
  procetedprivate和 package 定義的成員變量如果名字含義明確的話可以沒有注釋
  存取方法
  接下來是類變量的存取的方法它只是簡單的用來將類的變量賦值獲取值的話 可以簡單的寫在一行上
  /** * Get the counters
  * @return an array containing the statistical data This array has been
  * freshly allocated and can be modified by the caller
  */
  public int[] getPackets() { return copyArray(packets offset); }
  public int[] getBytes() { return copyArray(bytes offset); }
  public int[] getPackets() { return packets; }
  public void setPackets(int[] packets) { thispackets = packets; }
  其它的方法不要寫在一行上
  構造函數
  接下來是構造函數它應該用遞增的方式寫(比如參數多的寫在後面)
  訪問類型 (public private) 和 任何 static finalsynchronized ?
  該在一行中 並且方法和參數另寫一行這樣可以使方法和參數更易讀
  public CounterSet(int size){
  thissize = size;
  }
  克隆方法
  如果這個類是可以被克隆的那麼下一步就是 clone 方法
  public Object clone() {
  try { CounterSet obj = (CounterSet)superclone();
  objpackets = (int[])packetsclone();
  objsize = size; return obj;
  }catch(CloneNotSupportedException e) {
  throw new InternalError(Unexpected CloneNotSUpportedException:
  + egetMessage());
  }
  }
  類方法
  下面開始寫類的方法
  /** * Set the packet counters
  * (such as when restoring from a database)
  */
  protected final void setArray(int[] r int[] r int[] r int[] r)
  throws IllegalArgumentException { // // Ensure the arrays are of equal size
  // if (rlength != rlength || rlength != rlength
  //|| rlength != rlength)
  throw new IllegalArgumentException(Arrays must be of the same size);
  Systemarraycopy(r r rlength);
  Systemarraycopy(r r rlength);
  }
  toString 方法無論如何每一個類都應該定義 toString 方法
  public String toString() {
  String retval = CounterSet: ;
  for (int i = ; i < data.length(); i++) {
  retval += data.bytes.toString();
  retval += data.packets.toString();
  }
  return retval;
  }
  }
  main 方法
  如果main(String[]) 方法已經定義了, 那麼它應該寫在類的底部.
  代碼編寫格式
  代碼樣式
  代碼應該用 unix 的格式,而不是 windows 的(比如:回車變成回車+換行)
  文檔化
  必須用 javadoc 來為類生成文檔。TW.wINgwIt.CoM不僅因為它是標准,這也是被各種 java 編譯器都認可的方法。使用 @author 標記是不被推薦的,因為代碼不應該是被個人擁有的。
  縮進
  縮進應該是每行2個空格. 不要在源文件中保存Tab字符.
  在使用不同的源代碼管理工具時Tab字符將因為用戶設置的不同而擴展為不同的寬度.
  如果你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,
  你可以通過如下操作來禁止保存Tab字符,
  方法是通過 UltrEdit中先設定 Tab 使用的長度室2個空格,
  然後用 Format|Tabs to Spaces 菜單將 Tab 轉換為空格。
  頁寬
  頁寬應該設置為80字符. 源代碼一般不會超過這個寬度, 並導致無法完整顯示,
  但這一設置也可以靈活調整. 在任何情況下, 超長的語句應該在一個逗號或者 一個操作符後折行. 一條語句折行後, 應該比原來的語句再縮進2個字符.
  {} 對 {} 中的語句應該單獨作為一行.
  例如, 下面的第1行是錯誤的, 第2行是正確的:
  if (i>) { i ++ }; // 錯誤 { 和 } 在同一行
  if (i>) {
  i ++
  }; // 正確 { 單獨作為一行
  } 語句永遠單獨作為一行 如果 } 語句應該縮進到與其相對應的 {
  那一行相對齊的位置
  括號
  左括號和後一個字符之間不應該出現空格 同樣 右括號和前一個字符之間也不應該出現空格 下面的例子說明括號和空格的錯誤及正確使用:
  CallProc( AParameter ); // 錯誤
  CallProc(AParameter); // 正確
  不要在語句中使用無意義的括號 括號只應該為達到某種目的而出現在源代碼中
  下面的例子說明錯誤和正確的用法:
  if ((I) = ) { // 錯誤 括號毫無意義
  if (I == ) or (J == ) then // 正確 的確需要括號
  程序編寫規范
  exit()
  exit 除了在 main 中可以被調用外其他的地方不應該調用因為這樣做不給任何代碼代碼機會來截獲退出一個類似後台服務地程序不應該因為某一個庫模塊決定了要退出就退出
  異常
  申明的錯誤應該拋出一個RuntimeException或者派生的異常
  頂層的main()函數應該截獲所有的異常並且打印(或者記錄在日志中)在屏幕上
  垃圾收集
  JAVA使用成熟的後台垃圾收集技術來代替引用計數但是這樣會導致一個問題
  你必須在使用完對象的實例以後進行清場工作比如一個prel的程序員可能這麼
  寫
  
  {
  FileOutputStream fos = new FileOutputStream(projectFile);
  projectsave(fos IDE Project File);
  }
  
  除非輸出流一出作用域就關閉非引用計數的程序語言 比如JAVA是不能自動完成變量的清場工作的必須象下面一樣寫
  FileOutputStream fos = new FileOutputStream(projectFile);
  projectsave(fos IDE Project File);
  fosclose();
  Clone
  下面是一種有用的方法
  implements Cloneable public Object clone() {
  try {
  ThisClass obj = (ThisClass)superclone();
  objfield = (int[])fieldclone();
  objfield = field; return obj;
  } catch(CloneNotSupportedException e) {
  throw new InternalError(Unexpected CloneNotSUpportedException:
   + egetMessage());
  }
  }
  final 類絕對不要因為性能的原因將類定義為 final 的
  (除非程序要求這樣定義) 如果一個類還沒有准備好被繼承最好在類文檔中注明
  而不要將她定義為 final 的這是因為沒有人可以保證會不會由於什麼原因需要繼承她
  訪問類的成員變量
  大部分的類成員變量應該定義為 protected 的來防止繼承類使用他
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25342.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.