明确进行的静态初始化

Java 允许你将多个静态初始化动作组织成一个特殊的“静态子句”(有时也叫作“静态块”)。
就象下面这样:


class Spoon { 
static int i;
static { 
    i = 47; 

  }

尽管上面的代码看起来象个方法,但它实际只是一段跟在 static 关键字后面的代码。与其他

静态初始化动作一样,这段代码仅执行一次:当你首次生成这个类的一个对象时,或者首次

访问属于那个类的一个静态成员时(即便从未生成过那个类的对象)。例如:

 

//:c04:ExplicitStatic.java

// Explicitstatic initialization with the "static" clause.

import com.bruceeckel.simpletest.*;

 

class Cup {

  Cup(int marker) {

    System.out.println("Cup(" + marker + ")");

  }

void f(int marker) {

    System.out.println("f(" + marker + ")");

  }

}

 

class Cups {

static Cup c1;

static Cup c2;

static {

    c1 = new Cup(1);

    c2 = new Cup(2);

  }

  Cups() {

    System.out.println("Cups()");

  }

}

 

public   class ExplicitStatic {

static Test monitor = new Test();

public   static     void main(String[] args) {

    System.out.println("Inside main()");

    Cups.c1.f(99);     // (1)

    monitor.expect(new String[] {

"Insidemain()",

"Cup(1)",

"Cup(2)",

"f(99)"

    });

  }

// static Cupsx = new Cups();  // (2)

// static Cupsy = new Cups();  // (2)

}   ///:~

 

无论是通过标为(1)的那行程序访问静态的  c1     对象,还是把(1)注释掉,让它去运行标为(2)

的那行,Cups 的静态初始化动作都会得到执行。如果把(1)和(2)同时注释掉,Cups 的静态初

始化动作就不会进行。此外,激活一行还是两行(2)代码都无关紧要,静态初始化动作只进

行一次。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值