static初始化2(thinking in java 经典例子)

1.class Cup {
2.  Cup(int marker) { //d.由13行c进入,并打印  Cup(1)
3.    System.out.println("Cup(" + marker + ")");
4.  }
5.  void f(int marker) {
6.    System.out.println("f(" + marker + ")");
7.  }
8.}

9.class Cups {   b.由25行a进入此类
10.  static Cup c1;
11.  static Cup c2;
12. static {
13.    c1 = new Cup(1);//c.碰到new Cup(1),进入Cup(int marker)构造方法
14.    c2 = new Cup(2);//f. 执行完d后继续执行并调用Cup(int marker),打印 Cup(2)
15.  }
16.  Cups() {  //h. 由25行进入调用构造方法打印 Cup()
17.    System.out.println("Cups()");
18.  }
19.}

20.public class ExplicitStatic {
21.  public static void main(String[] args) {
22.    System.out.println("Inside main()");//j.执行完static方法块后进行非static方法执行,打印Inside main()..后略。。。。
23.    Cups.c1.f(99);  // (1)
24.  }
25.  static Cups x = new Cups();  // a.首先加载静态代码,由于初始化了类Cups,所以进入Cups类中  //g,回到此处,碰到new Cups(),调用Cups()构造方法
26.  static Cups y = new Cups();  //  i.调用完16行构造方法后继续执行static代码块,由于static只分配一次内存,所以不再调用Cups类
27.}
 
 
在标记为(1)的行内访问static对象c1的时候,或在行(1)标记为注释,同时(2)行不标记成注释的时候,用于Cups的static初始化模块就会运行。
若(1)和(2)都被标记成注释,则用于Cups的static初始化进程永远不会发生。(由于从static进入类中需要碰到此类的实例化代码才会进入)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值