public class Test {
public Test() {
System.out.println(" 構造函數");
}
@1:靜態初始化塊
static
{
System.out.println("static{}");
}
@2:初始化塊
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
運行結果為:
static{}
main()
程序執行順序為:靜態初始化塊static{}-->初始化塊{}-->構造函數constructor;
注意:即使沒有生成new此實例或此類是否有static main()函數,靜態初始化塊static{}也照樣會運行。
在繼承的情況下:
class Test{
Test(){
System.out.println("父類構造函數");
}
static{
System.out.println("父類靜態初始化塊");
}
{
System.out.println("父類初始化塊");
}
}
public class TestChild extends Test{
public TestChild() {
System.out.println("子類構造函數");
}
static
{
System.out.println("子類靜態初始化塊");
}
{
System.out.println("子類初始化塊");
}
public static void main(String[] args) {
new TestChild();
}
}
運行結果:
父類靜態初始化塊
子類靜態初始化塊
父類初始化塊
父類構造函數
子類初始化塊
子類構造函數
程序運行順序為:父靜態-->子靜態-->父初始化及構造-->子初始化及構造;
注意:初始化塊和構造是接連運行的,不會父類子類交替.