1. 程式人生 > 其它 >講講類的例項化順序,比如父類靜態資料,建構函式,欄位,子類靜態資料,建構函式,欄位,當 new 的時候, 他們的執行順序

講講類的例項化順序,比如父類靜態資料,建構函式,欄位,子類靜態資料,建構函式,欄位,當 new 的時候, 他們的執行順序

父類靜態代變數、
父類靜態程式碼塊、
子類靜態變數、
子類靜態程式碼塊、
父類非靜態變數(父類例項成員變數)、
父類建構函式、
子類非靜態變數(子類例項成員變數)、
子類建構函式。

程式碼案例:

package jvm.test;

/*
類載入器載入順序考究
 */
public class TestB {
    public static void main(String[] args) {
        son sons=new son();
    }
}

class parent{
    private static  int a=1;
    private static  int b;
    
private int c=initc(); static { b=1; System.out.println("1.父類靜態程式碼塊:賦值b成功"); System.out.println("1.父類靜態程式碼塊:a的值"+a); } int initc(){ System.out.println("3.父類成員變數賦值:---> c的值"+c); this.c=12; System.out.println("3.父類成員變數賦值:---> c的值"+c);
return c; } public parent(){ System.out.println("4.父類構造方式開始執行---> a:"+a+",b:"+b); System.out.println("4.父類構造方式開始執行---> c:"+c); } } class son extends parent{ private static int sa=1; private static int sb; private int sc=initc2(); static { sb
=1; System.out.println("2.子類靜態程式碼塊:賦值sb成功"); System.out.println("2.子類靜態程式碼塊:sa的值"+sa); } int initc2(){ System.out.println("5.子類成員變數賦值--->:sc的值"+sc); this.sc=12; return sc; } public son(){ System.out.println("6.子類構造方式開始執行---> sa:"+sa+",sb:"+sb); System.out.println("6.子類構造方式開始執行---> sc:"+sc); } }