子類的執行個體化主要分為兩個步驟:
<1>.類相關靜態內容初始化;
*先父類再子類:
1.父類的static屬性;
2.父類的static塊;
3.子類的static屬性;
4.子類的static塊;
<2>.類的執行個體內容初始化;
*調用構造子:先父類後子類:構造子調用之前先執行個體化執行個體欄位和塊
5.父類的普通屬性;
6.父類的普通塊;
7.父類的構造子;
8.子類的普通屬性;
9.子類的普通塊;
10.子類的構造子;
舉例:
package basic;public class ClzInit {public static void main(String[] args) {new Son();}}class Parent {protected int n = 5;protected static int m = 5;static {m = m * 2;System.out.println("父類靜態塊調用;m="+m);}{n = n * 2;m = m * 2;System.out.print("父類普通塊調用;");System.out.print("n="+n);System.out.println("m="+m);}public Parent() {this.n = n * 10;m = m + 10;System.out.print("父類構造子;n="+n);System.out.println("m="+m);}}class Son extends Parent {private int sn=3;private static int sm=3;static {m = m + 2;sm=sm+2;System.out.println("子類靜態塊調用;m="+m);}{n = n + 2;sn=sn+2;m = m + 2;System.out.println("子類普通塊調用;");System.out.print("n="+n);System.out.print("sn="+sn);System.out.println("m="+m);}public Son() {this.n = n + 10;sn=sn+10;m = m + 10;System.out.print("子類構造子;n="+n);System.out.println("m="+m);}}
看輸出結果,可見端倪:
父類靜態塊調用;m=10子類靜態塊調用;m=12父類普通塊調用;n=10m=24父類構造子;n=100m=34子類普通塊調用;n=102sn=5m=36子類構造子;n=112m=46
備忘。歡迎各位指正!