首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 開發規範精要:提升代碼品質與效率的核心準則

     編輯:Java 相關知識

前言

良好的程式碼規範是專業 Java 開發的基石。本文整理了開發中常見的中級規範,涵蓋資源管理、控制流程、異常處理、命名慣例等核心領域,助你編寫更健壯、可維護的高品質代碼。

一、資源管理:務必在 finally 區塊關閉流

當方法中建立 InputStream 或 OutputStream 時,必須在 finally 區塊確保其關閉,防止系統資源洩漏。即使發生異常,也能保證資源釋放。

例外情況: 以下類別的 close() 無實際作用,無需強制關閉:

  • java.io.StringWriter
  • java.io.ByteArrayOutputStream
  • java.io.ByteArrayInputStream

錯誤示範

public void method(File f) {
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(f);
        fis.read();
        fis.close(); // 若 read() 拋出異常,close() 不會執行
    } catch (FileNotFoundException e) { ... }
    catch (IOException e) { ... }
}

正確寫法

public void method(File f) {
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(f);
        fis.read();
    } catch (FileNotFoundException e) { ... }
    catch (IOException e) { ... }
    finally {
        if (fis != null) {
            try { fis.close(); }
            catch (IOException e) { ... }
        }
    }
}

提示:Java 7+ 可使用 try-with-resources 語法自動管理資源,更為簡潔。

二、控制流程規範

1. if-else 必須使用大括號

巢狀 if 搭配 else 時,省略大括號會導致「懸空 else」歧義。強制使用 {} 可消除歧義,提升可讀性。

// 錯誤
if (i < 5)
    if (i < 2) i++;
else i--;

// 正確
if (i < 5) {
    if (i < 2) i++;
} else {
    i--;
}

2. 禁止空 catch 區塊

catch 區塊至少應記錄錯誤資訊或採取補救措施。僅允許包含 Javadoc 註解的空實作。

// 錯誤
catch (IOException e) { }

// 正確
catch (IOException e) {
    logger.error("讀取失敗", e);
}

3. 避免在條件判斷中賦值

Java 中 if (b = true) 會編譯報錯,務必使用 == 比較,防止邏輯錯誤。

4. for 迴圈需包含迴圈主體

for (i=0; i<10; i++); 結尾的分號導致迴圈主體為空,僅執行一次。正確寫法:

for (i = 0; i < 10; i++) {
    System.out.println(i);
}

三、命名與設計規範

5. 避免自定義 main() 方法

main 為 JVM 保留入口點,自定義同名方法易造成混淆。

6. 不要繼承 Error 或 Throwable

自定義異常應繼承 Exception。繼承 Error 會誤導編譯器視為 JVM 內部錯誤,導致異常檢查失效。

// 錯誤
public class ABC extends Error { }

// 正確
public class ABC extends Exception { }

7. switch-case 必須以 break/return 結尾

避免「貫穿」導致非預期邏輯。最後一個 default 亦建議加上 break,便於後續擴充。

8. 不建議使用 System.getenv()

並非所有平台皆支援環境變數,建議改用 System.getProperty() 獲取系統屬性,確保跨平台相容性。

9. 換行符使用平台無關寫法

避免硬編碼 \n 或 \r。推薦使用:

  • System.out.println() 自動處理換行
  • System.getProperty("line.separator") 獲取平台專屬換行符

10. 內部類應宣告為 private

Java 編譯器將內部類編譯為 package-private 類別,若不加 private,同包其他類別可存取外部類私有成員,破壞封裝性。

11. 介面不可序列化

序列化介面會暴露實作類別的私有狀態,造成安全風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved