構造器確保對象創建即合法初始化。無參構造器(默認構造器)僅在類無任何顯式構造器時由編譯器自動生成;一旦定義任意構造器,默認構造器消失。
char→int→long→float→double),可能導致歧義
class Flower {
String name;
Flower() { this("Unknown"); } // 調用另一構造器
Flower(String name) { this.name = name; }
}
this(args) 必須置於構造器首行static 方法屬於類,無 this,不可直接訪問非靜態成員用於釋放非 new 分配的資源(如 JNI 本地內存、文件句柄)。不是析構函數:
finalize() 執行時間更不確定
class Resource implements AutoCloseable {
private native long handle; // JNI 句柄
public void close() { nativeRelease(handle); }
@Override protected void finalize() { close(); } // 最後防線
}
// 使用
try (Resource r = new Resource()) {
// 使用資源
} // 自動調用 close()
class Order {
static int a = init("static a");
int b = init("instance b");
{ System.out.println("instance block"); } // 實例塊
static { System.out.println("static block"); } // 靜態塊
Order() { System.out.println("constructor"); }
}
int[] a = {1,2,3} 或 new int[3]void foo(int... args) 內部接收 int[]
enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING }
// 自動提供:toString()、ordinal()、values()、valueOf()
// 支持 switch、實現接口、擁有字段方法
初始化靠構造器強制保證,清理靠顯式 close()/try-with-resources主動釋放,finalize() 只是兜底不可依賴。理解成員初始化順序、靜態塊時機、枚舉編譯器增強,編寫更健壯的資源管理代碼。