package staticinit.one;
public class Main1 {
public static void main(String[] args) {
System.out.println("第一遍初始化StaticOrInstance...");
new StaticOrInstance();
System.out.println("第二遍初始化StaticOrInstance...");
new StaticOrInstance();
/*
* 輸出結果:
* 第一遍初始化StaticOrInstance...
* Mug(3)
* Mug(4)
* Mug(1)
* Mug(2)
* StaticOrInstance constructor...
* 第二遍初始化StaticOrInstance...
* Mug(1)
* Mug(2)
* StaticOrInstance constructor...
*/
}
}
class StaticOrInstance {
public Mug mug1;
public Mug mug2;
public static Mug mug3;
public static Mug mug4;
{
mug1 = new Mug(1);
mug2 = new Mug(2);
}
static {
mug3 = new Mug(3);
mug4 = new Mug(4);
}
public StaticOrInstance() {
System.out.println("StaticOrInstance constructor...");
}
}
class Mug {
public Mug() {
}
public Mug(int i) {
System.out.println("Mug(" + i + ")");
}
}
注:1.在類初始化時,先初始化靜態塊或變量,再初始化非靜態塊或變量(StaticOrInstance類中靜態塊位於非靜態塊後面,但是輸出結果中靜態塊先初始化);2.靜態塊或變量只會在第一次初始化時初始化,而非靜態塊或變量會在每一次類初始化時執行初始化(在第二次初始化時靜態塊沒有再次初始化);3.靜態塊(變量)和非靜態塊(變量)均在構造方法之前被初始化。