静态数据的初始化

java初始化的顺序是先静态对象(如果他们尚未因前面的对象创建过程而被初始化),然后是“非静态”对象。

如下例

从输出可以看出要执行main()方法,必须加载StaticInitialization类,然后其静态变量table和cupboard被初始化,相应的类也会被加载,并且由于他们也都包含Bow1静态对象,因此Bow1随后也会被加载

 

//: initialization/StaticInitialization.java

// Specifying initial values in a class definition.

import static net.mindview.util.Print.*;

 

class Bowl {

  Bowl(int marker) {

    print("Bowl(" + marker + ")");

  }

  void f1(int marker) {

    print("f1(" + marker + ")");

  }

}

 

class Table {

  static Bowl bowl1 = new Bowl(1);

  Table() {

    print("Table()");

    bowl2.f1(1);

  }

  void f2(int marker) {

    print("f2(" + marker + ")");

  }

  static Bowl bowl2 = new Bowl(2);

}

 

class Cupboard {

  Bowl bowl3 = new Bowl(3);

  static Bowl bowl4 = new Bowl(4);

  Cupboard() {

    print("Cupboard()");

    bowl4.f1(2);

  }

  void f3(int marker) {

    print("f3(" + marker + ")");

  }

  static Bowl bowl5 = new Bowl(5);

}

 

public class StaticInitialization {

  public static void main(String[] args) {

    print("Creating new Cupboard() in main");

    new Cupboard();

    print("Creating new Cupboard() in main");

    new Cupboard();

    table.f2(1);

    cupboard.f3(1);

  }

  static Table table = new Table();

  static Cupboard cupboard = new Cupboard();

} /* Output:

Bowl(1)

Bowl(2)

Table()

f1(1)

Bowl(4)

Bowl(5)

Bowl(3)

Cupboard()

f1(2)

Creating new Cupboard() in main

Bowl(3)

Cupboard()

f1(2)

Creating new Cupboard() in main

Bowl(3)

Cupboard()

f1(2)

f2(1)

f3(1)

*///:~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值