static塊,遊離塊與構造方法執行順序

A類:測試

public class A {
    static int i=9;
    static {
        i++;
        System.out.println("A的靜態類型"+i);
    }
    {
        i++;
        System.out.println("A的非靜態"+i);
    }
    public A(){    
        i++;
        System.out.println("A的無參構造方法"+i);
    }
    public A(String Astr){
        System.out.println("A的有參構造方法");
    }    
}繼承

 

繼承A的B類:class

public class B extends A{變量

static int i=9;
    static {
        i++;
        System.out.println("B的靜態類型"+i);
    }
    {
        i++;
        System.out.println("B的非靜態"+i);
    }
    public B(){
        i++;
        System.out.println("B的無參構造方法"+i);
    }
    public B(String Bstr){
        System.out.println("B的有參構造方法");
    }   
}方法

測試代碼:static

        new B();
        System.out.println(B.i);
        System.out.println(A.i);new

測試結果:

A的靜態類型10
B的靜態類型10
A的非靜態11
A的無參構造方法12
B的非靜態11
B的無參構造方法12
12
12

 

類的執行順序
        單類:
           1) 執行static的代碼塊和static的成員變量
           2) 執行非static的代碼塊和非static的成員變量
           3)執行構造方法

        父子類:
           1) 執行父類的static的代碼塊和static的成員變量
           2) 執行子類的static的代碼塊和static的成員變量
           3) 執行父類非static的代碼塊和非static的成員變量
           4)執行父類的構造方法
           5) 執行子類非static的代碼塊和非static的成員變量
           6)執行子類的構造方法

 

靜態塊:用static聲明,Jvm加載類時執行並只執行一次;

相關文章
相關標籤/搜索