显式的静态初始化

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初始化进程永远不会发生。

 

你可能感兴趣的:(显式的静态初始化)