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

高效 Java 編程規範:十一條核心基礎規則

     編輯:Java 相關知識

本文整理自實戰經驗,按重要性分級(Level 1 為最高),遵循可顯著提升效能、可讀性與維護性。

Level 1:核心效能與正確性

1. 避免 new String("literal") 建立字串物件

// ❌ 浪費:每次執行都在堆上建立新物件
private String str = new String("1");

// ✅ 正確:直接使用字串常量(常量池複用)
private String str = "1";

String 為不可變類,字面值自動進入常量池,new 強制在堆上分配,零收益。

2. 避免不必要的巢狀與複雜表達式

// ❌ 過度巢狀、難閱讀
int c = (a = a + b) + b;

// ✅ 拆分步驟,語意清晰
a = a + b;
int c = a + b;

3. 單行單宣告,嚴禁混合類型

// ❌ 易混淆
private int index, index1[];

// ✅ 分行、分類型
private int index;
private int[] index1;

4. 每行一條陳述式(for 迴圈頭部除外)

// ❌ 壓行
int i = a + b; return i;

// ✅ 換行
int i = a + b;
return i;

Level 2:物件生命週期與資源管理

5. finalize() 中務必調用 super.finalize()

@Override
protected void finalize() throws Throwable {
    try {
        // 釋放自身資源
    } finally {
        super.finalize(); // 保證父類清理邏輯執行
    }
}

即使父類未覆寫,也應養成習慣,防止未來父類新增清理邏輯被遺漏。

6. 絕不在 finalize() 移除 Listener

finalize() 僅在物件不可達時由 GC 執行,若在其中移除 Listener,物件可能因 Listener 仍持有引用而無法被回收,造成記憶體洩漏。

7. 禁止顯式調用 finalize(),改用釋放方法

// ❌ 錯誤:導致雙重 finalize、效能損耗
t7.finalize();
t7 = null;

// ✅ 正確:自定義 release(),冪等、可控
public class Resource {
    private boolean released = false;
    public synchronized void release() {
        if (!released) {
            closeResources();
            released = true;
        }
    }
    @Override
    protected void finalize() throws Throwable {
        release(); // 兜底
        super.finalize();
    }
}

Level 3:API 使用與相容性

8. 拒絕使用 @Deprecated API

定期檢視編譯警告,替換為推薦替代方案(如 List.addItem() → add())。

9. 所有可序列化類必須顯式宣告 serialVersionUID

public class MyClass implements Serializable {
    private static final long serialVersionUID = 1L; // 版本鎖定
    // ...
}

否則 JVM 依類結構自動生成,類結構微調即導致反序列化失效(InvalidClassException)。

Level 4:命名與封裝規範

10. 私有常量必須加 final

// ❌ 可被意外修改
private int SIZE = 5;

// ✅ 編譯期常量,不可變
private static final int SIZE = 5;

11. 區域變數/參數勿與成員變數同名

// ❌ 遮蔽成員變數 j,易誤讀
public void method(int j) { ... }
private int j = 2;

// ✅ 參數改名,語意區分
public void method(int paramJ) { ... }
private int fieldJ = 2;

消除「遮蔽」帶來的認知負擔,SCJP 考試陷阱在實務中即為反面教材。

總結

十一條規則涵蓋字串處理、控制流、宣告風格、資源釋放、API 選擇、序列化、常量定義、命名規範。建議納入團隊 Code Review 清單,配合 Checkstyle/SpotBugs 自動化檢查,將規範落地為日常習慣。

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