这种“静态”是什么意思,为什么会这样呢?

时间:2010-12-14 10:51:57

标签: java

public class tt {
static{
    System.out.println("class tt");
    }
}

这是我第一次碰到它,我想知道它是什么以及它用于什么

5 个答案:

答案 0 :(得分:5)

它是类的静态初始化器。加载类时,将运行静态初始化程序。它就像构造函数,但是对于类而不是单个对象。

多个静态初始化程序可以出现在类中,也可以出现在静态变量的直接初始化程序中。这些将按照声明的顺序合并为一个初始化程序。例如,每当加载类时,以下内容都会将“foo”打印到stdout(通常每个应用程序一次)。

public class Foo {

  static String a;

  static {
    a = "foo";
  }

  static String b = a;

  static {
    System.println(b);
  }

}

答案 1 :(得分:4)

其启动器块

  

静态初始化块是用大括号{}括起来的常规代码块,前面是static关键字。这是一个例子:

static {
    // whatever code is needed for initialization goes here
}
  

一个类可以有任意数量的静态初始化块,它们可以出现在类体中的任何位置。运行时系统保证按照它们在源代码中出现的顺序调用静态初始化块。   还有静态块的替代方法 - 您可以编写私有静态方法:

class Whatever {
    public static varType myVar = initializeClassVariable();

    private static varType initializeClassVariable() {

        //initialization code goes here
    }
}
  

私有静态方法的优点是,如果需要重新初始化类变量,它们可以在以后重用。

答案 2 :(得分:2)

这是静态初始化程序教程http://download.oracle.com/javase/tutorial/java/javaOO/initial.html

在初始化之前加载类时运行。

public class A {

    static {
        System.out.println("A from static initializer"); // first 
    }

    public A(){
        System.out.println("A"); // second
    }

    public static void main(String[] args){
        new A();
    }
}

答案 3 :(得分:1)

这是一个静态初始化程序。当JVM加载类时,该块内的代码运行,这是在程序第一次需要对该类执行任何操作之前(例如,查找静态字段,调用静态方法,实例化对象,......)

答案 4 :(得分:0)

这是static initializer块。它将在首次加载类时执行一次,以及静态字段初始化器,如下所示:

private static int staticField = someMethod();

不同之处在于初始化块可以包含控制流结构,如try / catch块。