public class tt {
static{
System.out.println("class tt");
}
}
这是我第一次碰到它,我想知道它是什么以及它用于什么
答案 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块。