class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); }
void f1() { System.out.println("Ok"); } }
class Cupboard { Bowl b1 = new Bowl(1);
static Bowl b2 = new Bowl(2);
Cupboard() { System.out.println("Cupboard()"); }
static Bowl b3 = new Bowl(3); }
class Table { Table() { System.out.println("Table()"); } Table(String a,int i){ this(); System.out.println("Ok"); } }
public class Order { static Cupboard t1 = new Cupboard();
static Table t2;
Bowl t3 = new Bowl(10);
void print() { t3.f1(); }
public static void main(String[] args) { System.out.println("Creating new Cupboard() in main"); new Cupboard(); System.out.println("Creating new Cupboard() in main"); Order od = new Order(); od.t3.f1(); Table t4 = new Table("aa",1); } }
程序運行時:裝載Order.class,運行Order類中的static塊 static Cupboard t1 = new Cupboard(); 這構造了一個Cupboard對象,構造對象時,會裝載Cupboard類, 也是先執行static塊 static Bowl b2 = new Bowl(2);//創建一個Bowl對象,過程和Cupboard一樣,會調用構造函數 static Bowl b3 = new Bowl(3);//同上 然後執行 Bowl b1 = new Bowl(1);//創建一個Bowl對象 然後執行構造函數Bowl()
接下來: static Table t2;//這只是聲明,並沒有創建對象,不用理會 然後: 執行main函數中的語句 System.out.println("Creating new Cupboard() in main"); new Cupboard(); //注意的是,static只會初始化一次 System.out.println("Creating new Cupboard() in main"); Order od = new Order();//創建Order對象,同上 od.t3.f1(); Table t4 = new Table("aa",1);//創建了Table,注意這裡構造函數的調用this()就可以(需要了解重載)

|