| 類別 | 類型 | 大小 | 備註 |
|---|---|---|---|
| 整數 | byte | 1 byte | -128~127 |
| short | 2 bytes | ||
| int | 4 bytes | 預設整數字面量型別 | |
| long | 8 bytes | 字面量需尾綴 L/l | |
| 字元 | char | 2 bytes | UTF-16 無符號 |
| 浮點 | float | 4 bytes | 字面量尾綴 F/f |
| double | 8 bytes | 預設浮點字面量型別 | |
| 布林 | boolean | 1 byte(JVM 實作相關) | 僅 true/false,無 0/1 隱性轉換 |
int mask = 0b1010_1100;(支援底線分隔增強可讀性)char 固定 16 位 Unicode(\uXXXX),補字元需用 int 或 String 處理1.0 / 0.0 → Double.POSITIVE_INFINITY-1.0 / 0.0 → Double.NEGATIVE_INFINITY0.0 / 0.0 或 Math.sqrt(-1) → Double.NaNNaN 與任何值比較(含自身)均回傳 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" —— 編譯期靜態綁定
只有非靜態方法具備動態分派(多型),欄位、靜態方法、私有方法、建構器均為靜態綁定。
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)、靜態內部類 或 枚舉 實作執行緒安全單例。
static { }){ })或每個建構器中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 方法:不可被覆寫(private 方法隱含 final 語意)final 類:不可被繼承final 方法屬於遮蔽,非覆寫finalprivate finalString、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 強制子類別實作,兩者語意衝突,編譯錯誤。
public static finalpublic abstract(JDK 8+ 可 default/static)| 內部類類型 | 可存取外部成員 | 外部實例化語法 | 可含 static 成員 |
|---|---|---|---|
| 非靜態內部類 | 所有(含私有) | new Outer().new Inner() | 否 |
| 靜態內部類 | 僅 static 成員 | new Outer.Inner() | 是 |
非靜態內部類實例隱含持有外部類實例引用,可能導致記憶體洩漏(如長壽命內部類引用短壽命外部類)。
OuterClass.this.field 明確存取)