1. 程式人生 > >Java 的初始化順序

Java 的初始化順序

star 變量 [] extend 初始 system 輸出 color 默認值

初始化順序:

1.將對象內存空間初始化為二進制0(所有的數據成員被設為默認值)

2.如果該類有基類則初始化其基類(調用默認基類構造器,也可在子類構造器中指定調用基類的某個構造器)

3. 靜態成員和靜態域(誰在前誰先初始化,且在內存中只占一份空間,同一個類不同對象可以共享)

4.main方法

5.非靜態成員變量,引用,實例初始化 被初始化

6. 構造器

1,2,3,4為類加載過程,5,6為new對象過程,只有new會執行。

class A {
    A() {
        System.out.println("基類構造器");
        System.out.println(
"證明數據成員被設為默認值"); draw(); } A(String s) { System.out.println(s); } void draw() { System.out.println("A.draw()"); } } public class Test extends A { int i = 5; Test() { System.out.println("子類構造器"); System.out.println("證明數據成員在構造器調用之前被初始化"); draw(); } String b
= "非靜態成員"; A a = new A(b + "與非靜態引用"); { A b = new A("實例初始化"); } String c = "非靜態成員與實例初始化平級,誰在前先初始化誰"; A d = new A(c); void draw() { System.out.println("i = " + i); } static A start = new A("---類加載---"); static String e = "靜態成員"; static A f = new
A(e + "和靜態引用"); static { A g = new A("靜態域"); } static String h = "靜態成員與靜態域平級,誰在前先初始化誰"; static A j = new A(h); public static void main(String[] args) { System.out.println("main執行"); System.out.println("---創建Test對象---"); Test k = new Test(); } }

輸出結果:

---類加載---
靜態成員和靜態引用
靜態域
靜態成員與靜態域平級,誰在前先初始化誰
main執行
---創建Test對象---
基類構造器
證明數據成員被設為默認值
i = 0
非靜態成員與非靜態引用
實例初始化
非靜態成員與實例初始化平級,誰在前先初始化誰
子類構造器
證明數據成員在構造器調用之前被初始化
i = 5




Java 的初始化順序