Java 子類物件初始化過程
阿新 • • 發佈:2019-03-04
一個經典的Java的面試題
- 靜態程式碼塊:顧名思義就是存放在靜態程式碼區的程式碼,在類初始化時放入靜態程式碼區,只執行一次
- 普通程式碼塊:隨著物件例項的建立而建立
- 構造程式碼區:物件例項建立時建立
執行順序:靜態代塊 -> 普通程式碼塊 -> 構造程式碼塊
簡單類例項化過程:靜態程式碼區 -> 靜態屬性初始化 -> 動態屬性初始化 -> 普通程式碼區 -> 建構函式
作用:一般完成一些類例項建立或類載入前的初始化工作
package com.zhiwei.basic; public class FatherAndSon { public static void main(String[] args) { new Son(); } private static class Father{ public String name; //靜態程式碼塊 static{ System.out.println("Father Static Code Area........"); } //普通程式碼塊 { name="father"; //初始化類屬性 System.out.println("Father public Code Area........"); } //構造程式碼塊 public Father(){ System.out.println("Father construct Code Area........"); } } private static class Son extends Father{ //靜態程式碼塊 static{ System.err.println("Son Static Code Area........"); } //普通程式碼塊 { name="Son"; //初始化類屬性 System.err.println("Son public Code Area........"); } //構造程式碼塊 public Son(){ System.err.println("Son construct Code Area........"); } } }
------------------------結果-------------------
Son Static Code Area........
Father Static Code Area........
Son public Code Area........
Son construct Code Area........
Father public Code Area........
Father construct Code Area........
分析: 父類靜態程式碼塊 -> 子類靜態程式碼塊 -> 父類普通程式碼塊 -> 父類構造程式碼塊(非靜態程式碼塊) -> 子類普通程式碼塊 -> 子