Java 編程規范


好的軟件:

可維護性
可測試性
可靠性
性能
簡潔
可移植性

華為 Program SMaRT 定義

高效
可移植
簡潔
可維護
可靠
可測試

編程規范

排版:

原則

團隊一致

規則:

  1. 在不同概念之間增加空行
  2. 將邏輯緊密相關的代碼放在一起
  3. 控制一行的寬度,不要超過120個字符
  4. 控制一行的寬度,在不同的概念間增加空格
  5. 控制采用縮進來區分不同層次的概念(4個空格)

建議:

  1. 將局部變量的作用域最小化
  2. if,for,do,while,case,swich,default等語句自占一行,且if,for,do,while必須加括號
  3. 控制文件的長度,最好不要超過500行

注釋:

盡量用代碼來解釋自己

1. 注釋解釋代碼的意圖
2. 保證注釋與代碼一致
3. 注釋與代碼相鄰,上下方
4. 不要用注釋保留廢棄代碼
5. 不要用注釋記錄修改日志

命名

原則:

團隊為包、類、方法、變量取一個號名字

規則:

  1. 禁止使用魔鬼數字
  2. 常量命名,由全大寫單詞組成,單詞間用下划線分隔,且使用static final修飾
  3. 變量、屬性命名,使用名詞,並采用首字母小寫的駝峰命名法
  4. 方法的命名,用動詞和動賓結構,采用首字母小寫的駝峰命名法
    格式如下:
    get+非布爾屬性名()
    is+布爾屬性名()
    set+屬性名()
    has+名詞/形容詞()
    動詞()
    動詞+賓語()
  5. 類和接口的命名,采用首字母大寫的駝峰命名法
  6. 包的命名,由一個或若干個單詞組成,所有的字母均為小寫

建議:

數組聲明用 int [] index ,而不用 int index []

變量和類型

原則:

謹慎使用靜態成員變量

規則:

1. 避免隨意進行類型強制轉換,應改善設計,或在轉換前用instanceof進行判斷
2. 需要精確計算時不要使用float和double,建議用long,BigDecimal等
3. 不能用浮點數作為循環變量,精度問題會導致錯誤
4. 浮點型數據判斷相等不能直接使用==,做減法,取絕對值和極小值對比,double用1E-6對比
5. 避免同一個局部變量在前后表達不同的含義
6. 不要在單個的表達式中對相同的變量賦值超過一次

方法

原則:

  1. 短小
  2. 單一,一個方法僅做一件事情
  3. 單一抽象層次原則
  4. 命令與查詢職責分離

規則:

  1. 不要把方法的入參當作工作變量/臨時變量,除非特別需要(在方法里定義一個臨時變量運算)
  2. 使用類名調用靜態方法,而不要使用實例或表達式來調用

建議

  1. 應明確規定對接口方法參數的合法性檢查 由 調用者負責還是由接口方法本身負責
  2. 謹慎使用可變數量參數的方法
  3. 對接方法的參數個數不宜過多

包、類、接口

原則:

  1. 類和接口的設計應該遵循面向對象SOLID設計原則
  2. 類的設計應遵循迪米特法則
  3. 類的設計應遵循 Tell,Don't ask 原則

規則

  1. 除提供給外部使用的全局變量外,應盡量避免類成員變量被外部直接訪問
  2. 避免在無關的變量或無關的概念之間重用名字,避免隱藏(hide)、遮蔽(shadow)和遮蔽(obscure)
  3. 不要在父類的構造方法中調用可能被子類覆蓋的方法
  4. 覆寫equals方法時,應同時覆寫hashCode方法
    1. 同一次運行中,同一個對象如果equals方法中信息沒變,多次調用hashCode返回值必須相同
    2. 兩對象調用equals方法相同,則他們的hashCode方法也必須返回相同值
    3. 兩對象調用equals方法不同,他們調用hashCode方法,不要求返回值不同

異常

原則:

只針對真正異常的情況才使用exception機制

規則

  1. 對可恢復的情況使用受檢異常(checked exception),對編程錯誤使用運行時異常(runtime exception)
  2. 不要忽略異常
  3. 方法注釋和文檔中要包含所拋出異常的說明
  4. 方法拋出的異常,應該與本身的抽象層次相對應
  5. 在finally 塊中不要使用return、break或continue使finally塊非正常結束
  6. 不要直接捕獲受檢異常的基類Exception

建議

  1. 對第三方API拋出的大量各類異常進行封裝
  2. 一個方法不應該拋出太多類型的異常

語言特性

規則

  1. 運算和表達式 不要寫復雜的表達式,將難懂的語句封裝到方法里,用方法名自注釋
  2. 運算時應避免產生溢出 BigInteger

建議

運算采用括號明確運算的優先級

控制語句

  1. 在switch語句的每個case、和default中都放置一條break語句
  2. 采用for-each代替傳統的for循環

泛型

在集合中使用泛型

其他

新代碼不要使用已標注為@deprecated 的方法

測試

基本概念

定義:測試是一個包含計划,准備和測量活動的過程,其目的是確認
被測系統的特性,並指出需求和實現之間的差異。

目的

發現缺陷
增強對質量的信心
為決策者提供信息
預防缺陷

分類:

  • 是否需要執行: 靜態測試、動態測試
  • 測試不同階段:單元測試,系統測試,集成測試,驗收測試
  • 是否需要了解內部結構:黑盒測試,白盒測試

靜態測試方法:

1. 代碼檢查工具檢查
2. 走讀
3. 檢視

動態測試方法:構造測試實例,執行程序,分析輸出結果

1. 等價類划分
2. 邊界值分析
3. 決策表分析
4. 判定條件覆蓋
5. 條件組合覆蓋

單元測試

對模塊做測試,叫單元測試

軟件開發生命周期

需求分析--架構設計--規格說明--編碼--單元測試--集成測試--操作系統測試

Junit
單元測試框架

Test 測試接口
TestCase 測試集 多個測試
TestSuite 測試用例、套件 只有一個


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM