国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java程序的編碼規范

2019-11-18 11:52:43
字體:
來源:轉載
供稿:網友

  所有的程序開發手冊都包含了各種規則。一些習慣自由程序人員可能對這些規則很不適應,但是在多個開發人員共同寫作的情況下,這些規則是必需的。這不僅僅是為了開發效率來考慮,而且也是為了后期維護考慮。
  命名規范
  定義這個規范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。(這些規范并不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)
  ● Package 的命名
  Package 的名字應該都是由一個小寫單詞組成。
  ● Class 的命名
  Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成
  ● Class 變量的命名
  變量的名字必須用一個小寫字母開頭。后面的單詞用大寫字母開頭。
  ● Static Final 變量的命名
  
  Static Final 變量的名字應該都大寫,并且指出完整含義。
  ● 參數的命名
  參數的名字必須和變量的命名規范一致。
  ● 數組的命名
  數組應該總是用下面的方式來命名:
   byte[] buffer;
  而不是:
   byte buffer[];
  ● 方法的參數
  
  使用有意義的參數命名,假如可能的話,使用和要賦值的字段一樣的名字:
   SetCounter(int size){
   this.size = size;
  }
  java 文件樣式
  所有的 Java(*.java) 文件都必須遵守如下的樣式規則:
  
  ● 版權信息
  
  版權信息必須在 java 文件的開頭,比如:
  
   /**
   * Copyright ?2000 Shanghai XXX Co. Ltd.
   * All right reserved.
   */
   其他不需要出現在 javadoc 的信息也可以包含在這里。
  
  ● Package/Imports
  package 行要在 import 行之前,import 中標準的包名要在本地的包名之前,而且按照字母順序排列。假如 import 行中包含了同一個包中的不同子目錄,則應該用 * 來處理。
  package hotlava.net.stats;
  import java.io.*;
  import java.util.Observable;
  import hotlava.util.application;
  這里 java.io.* 使用來代替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 counters
   */
  protected int[] packets;
  public 的成員變量必須生成文檔(JavaDoc)。proceted、private和 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) { this.packets = packets; }
  其它的方法不要寫在一行上。
  ● 構造函數
  
  接下來是構造函數,它應該用遞增的方式寫(比如:參數多的寫在后面)。
  
  訪問類型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" 應該在一行中,并且方法和參數另寫一行,這樣可以使方法和參數更易讀。
  
  public
  CounterSet(int size){
   this.size = size;
  }
  ● 克隆方法
  
  假如這個類是可以被克隆的,那么下一步就是 clone 方法:
  
  public
  Object clone() {
   try {
   CounterSet obj = (CounterSet)super.clone();
   obj.packets = (int[])packets.clone();
   obj.size = size;
   return obj;
   }catch(CloneNotSupportedException e) {
   throw new InternalError("UneXPected CloneNotSUpportedException: " + e.getMessage());
   }
  }
  ● 類方法
  下面開始寫類的方法:
   /**
   * Set the packet counters
   * (sUCh as when restoring from a database)
   */
  protected final
  void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
   throws IllegalArgumentException
  {
   //
   // Ensure the arrays are of equal size
   //
   if (r1.length != r2.length r1.length != r3.length r1.length != r4.length)
   throw new IllegalArgumentException("Arrays must be of the same size");
   System.arraycopy(r1, 0, r3, 0, r1.length);
   System.arraycopy(r2, 0, r4, 0, r1.length);
  }
  ● toString 方法
  無論如何,每一個類都應該定義 toString 方法:
  
  public
  String toString() {
   String retval = "CounterSet: ";
   for (int i = 0; i   retval += data.bytes.toString();
   retval += data.packets.toString();
   }
   return retval;
   }
  }
   ● main 方法
  假如main(String[]) 方法已經定義了,那么它應該寫在類的底部。
  代碼編寫格式
  ● 代碼樣式
  代碼應該用 unix 的格式,而不是 windows 的(比如:回車變成回車+換行) 。
  ● 文檔化
  必須用 javadoc 來為類生成文檔。不僅因為它是標準,這也是被各種 java 編譯器都認可的方法。使用 @author 標記是不被推薦的,因為代碼不應該是被個人擁有的。
  
  ● 縮進
  
  縮進應該是每行2個空格。不要在源文件中保存Tab字符。在使用不同的源代碼治理工具時Tab字符將因為用戶設置的不同而擴展為不同的寬度。
  
  假如你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,你可以通過如下操作來禁止保存Tab字符,方法是通過 UltrEdit中先設定 Tab 使用的長度室2個空格,然后用 FormatTabs to Spaces 菜單將 Tab 轉換為空格。
  
  ● 頁寬
  
  頁寬應該設置為80字符。源代碼一般不會超過這個寬度,并導致無法完整顯示,但這一設置也可以靈活調整。在任何情況下,超長的語句應該在一個逗號或者一個操作符后折行。一條語句折行后,應該比原來的語句再縮進2個字符。
  
  ● {} 對
  {} 中的語句應該單獨作為一行。例如,下面的第1行是錯誤的第2行是正確的:
  
  if (i>0) { i ++ }; // 錯誤, { 和 } 在同一行
  if (i>0) {
  i ++
  }; // 正確, { 單獨作為一行
  } 語句永遠單獨作為一行。
  假如 } 語句應該縮進到與其相對應的 { 那一行相對齊的位置。
  ● 括號
  左括號和后一個字符之間不應該出現空格,同樣,右括號和前一個字符之間也不應該出現空格。下面的例子說明括號和空格的錯誤及正確使用:
  CallProc( AParameter ); // 錯誤
  CallProc(AParameter); // 正確
  不要在語句中使用無意義的括號。括號只應該為達到某種目的而出現在源代碼中。下面的例子說明錯誤和正確的用法:
  if ((I) = 42) { // 錯誤 - 括號毫無意義
  if (I == 42) or (J == 42) then // 正確 - 的確需要括號
  程序編寫規范
  ● exit()
  exit除了在main中可以被調用外,其他的地方不應該調用。因為這樣做不給任何代碼代碼機會來截獲退出。一個類似后臺服務地程序不應該因為某一個庫模塊決定了要退出就退出。
  ● 異常
  申明的錯誤應該拋出一個RuntimeException或者派生的異常。
  頂層的main()函數應該截獲所有的異常,并且打印(或者記錄在日志中)在屏幕上。
  
  ● 垃圾收集
  
  JAVA使用成熟的后臺垃圾收集技術來代替引用計數。但是這樣會導致一個問題:你必須在使用完對象的實例以后進行清場工作。比如一個prel的程序員可能這么寫:
  
   ...
   {
   FileOutputStream fos = new FileOutputStream(projectFile);
   project.save(fos, "IDE Project File");
   }
   ...
  除非輸出流一出作用域就關閉,非引用計數的程序語言,比如JAVA,是不能自動完成變量的清場工作的。必須象下面一樣寫:
   FileOutputStream fos = new FileOutputStream(projectFile);
   project.save(fos, "IDE Project File");
   fos.close();
  ● Clone
  下面是一種有用的方法:
  
   implements Cloneable
  
   public
   Object clone()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 綦江县| 赞皇县| 炎陵县| 林口县| 文登市| 行唐县| 富裕县| 余江县| 兴安县| 遵义县| 乌鲁木齐市| 东乌珠穆沁旗| 闸北区| 上饶县| 婺源县| 河津市| 广河县| 桂东县| 虎林市| 东方市| 北京市| 乐平市| 金川县| 黄大仙区| 石城县| 壶关县| 义乌市| 左贡县| 望江县| 桐乡市| 东港市| 临西县| 高陵县| 黎平县| 界首市| 浦城县| 永登县| 汝城县| 嵩明县| 沙雅县| 广宁县|