显式的静态初始化

Java允许我们将其他static初始化工作划分到类内一个特殊的“static构建从句”(有时也叫作“静态块”)里。它看起来象下面这个样子:

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

  
// . . .

 尽管看起来象个方法,但它实际只是一个static关键字,后面跟随一个方法主体。与其他static初始化一样,这段代码仅执行一次——首次生成那个类的一个对象时,或者首次访问属于那个类的一个static成员时(即便从未生成过那个类的对象)。例如:

// : ExplicitStatic.java
//  Explicit static initialization
//  with the "static" clause.

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  {
  
public static void main(String[] args) {
    System.out.println(
"Inside main()");
    Cups.c1.f(
99);  // (1)
  }

  
static Cups x = new Cups();  // (2)
  static Cups y = new Cups();  // (2) 
}
  // /:~

在标记为(1)的行内访问static对象c1的时候,或在行(1)标记为注释,同时(2)行不标记成注释的时候,用于Cups的static初始化模块就会运行。若(1)和(2)都被标记成注释,则用于Cups的static初始化进程永远不会发生。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值