學習筆記:java初始化順序

类别:Java 点击:0 评论:0 推荐:

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()就可以(需要了解重載)

本文地址:http://com.8s8s.com/it/it14307.htm