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

Java 核心知識點精華總結:從基礎類型到單例模式的 22 條實戰精要

     編輯:Java 程式設計入門

基本資料類型與記憶體佔用

類別類型大小備註
整數byte1 byte-128~127
short2 bytes
int4 bytes預設整數字面量型別
long8 bytes字面量需尾綴 L/l
字元char2 bytesUTF-16 無符號
浮點float4 bytes字面量尾綴 F/f
double8 bytes預設浮點字面量型別
布林boolean1 byte(JVM 實作相關)僅 true/false,無 0/1 隱性轉換

JDK 7+ 新特性

  • 二進制字面量:int mask = 0b1010_1100;(支援底線分隔增強可讀性)
  • 字元編碼:Java char 固定 16 位 Unicode(\uXXXX),補字元需用 int 或 String 處理

特殊數值與運算規則

  • 1.0 / 0.0 → Double.POSITIVE_INFINITY
  • -1.0 / 0.0 → Double.NEGATIVE_INFINITY
  • 0.0 / 0.0 或 Math.sqrt(-1) → Double.NaN
  • NaN 與任何值比較(含自身)均回傳 false,檢測請用 Double.isNaN()

陣列本質:沒有真正的多維陣列

int[][] a = new int[3][4]; 實為「陣列的陣列」:a[0]、a[1]、a[2] 分別指向獨立的一維陣列物件,長度可不一致(鋸齒陣列)。

套裝類別編譯/執行指令

javac -d . Hello.java   # -d 指定輸出根目錄,自動建立套件目錄樹
java pkg.MainClass      # 執行時使用完整限定名

多型陷阱:欄位不具多型性

class Parent { String field = "P"; }
class Child extends Parent { String field = "C"; }
Parent obj = new Child();
System.out.println(obj.field); // 輸出 "P" —— 編譯期靜態綁定

只有非靜態方法具備動態分派(多型),欄位、靜態方法、私有方法、建構器均為靜態綁定。

instanceof 運算子

obj instanceof Type:判斷 obj 是否為 Type、子類別或實作介面的實例。null instanceof AnyType 永遠回傳 false。

基本型別與包裝類別雙向轉換

int i = 1;
Integer obj = Integer.valueOf(i);  // 自動裝箱(優先使用快取)
int j = obj.intValue();            // 自動拆箱

注意:new Integer(1) 每次建立新物件,Integer.valueOf(1) 會複用 [-128, 127] 快取池。

單例模式(懶漢式·非執行緒安全版)

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) instance = new Singleton();
        return instance;
    }
}

生產環境請用 雙重檢查鎖(DCL)、靜態內部類 或 枚舉 實作執行緒安全單例。

final 欄位初始化鐵律

  • 靜態 final:宣告時或靜態初始化區塊(static { })
  • 實例 final:宣告時、實例初始化區塊({ })或每個建構器中
  • 系統不會對 final 欄位進行隱式預設值初始化

字串常量池與 intern 機制

String a = "java";
String b = "java";
System.out.println(a == b); // true —— 同一常量池引用

String c = new String("java");
System.out.println(a == c); // false —— 堆上新物件
System.out.println(a == c.intern()); // true —— 手動入池

final 方法與類

  • final 方法:不可被覆寫(private 方法隱含 final 語意)
  • final 類:不可被繼承
  • 子類別定義同名 final 方法屬於遮蔽,非覆寫

不可變類設計要點

  1. 類別宣告 final
  2. 所有欄位 private final
  3. 無 setter 方法
  4. 可變元件(如集合、日期)防禦性複製
  5. JDK 內建:8 大包裝類、String、LocalDate 等

快取不可變實例範式

public final class CacheImmutable {
    private static final int MAX = 10;
    private static final CacheImmutable[] CACHE = new CacheImmutable[MAX];
    private static int pos = 0;
    private final String name;

    private CacheImmutable(String name) { this.name = name; }

    public static CacheImmutable valueOf(String name) {
        for (CacheImmutable c : CACHE) if (c != null && c.name.equals(name)) return c;
        CacheImmutable n = new CacheImmutable(name);
        CACHE[pos % MAX] = n;  // 循環覆蓋策略
        pos++;
        return n;
    }
    // equals/hashCode 必須基於不可變狀態實作
}

適用於高頻重複、狀態固定的值物件(如幣別、語系、狀態碼)。

static 與 abstract 互斥

static 屬於類別層級,abstract 強制子類別實作,兩者語意衝突,編譯錯誤。

介面規範

  • 欄位隱含 public static final
  • 方法隱含 public abstract(JDK 8+ 可 default/static)
  • 類別可單繼承、多實作

內部類存取規則與實例化

內部類類型可存取外部成員外部實例化語法可含 static 成員
非靜態內部類所有(含私有)new Outer().new Inner()否
靜態內部類僅 static 成員new Outer.Inner()是

非靜態內部類實例隱含持有外部類實例引用,可能導致記憶體洩漏(如長壽命內部類引用短壽命外部類)。

變數查找順序(非靜態內部類方法內)

    1. 方法區域變數 2. 內部類實例欄位 3. 外部類實例欄位(需用 OuterClass.this.field 明確存取)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved