#java物件在初始化時不只是呼叫自身的建構方法,也涉及靜態語句區塊、實例語句區塊、靜態變數初始化、成員變數初始化等執行問題,初始化順序指的就是這五部分的執行順序。
package com.javase.classtest;public class InitializationSequence {static { System.out.println("静态语句块"); }static MyInnerClass in = new MyInnerClass("静态变量s"); MyInnerClass in01 = new MyInnerClass("a"); { System.out.println("实例语句块"); } MyInnerClass in02 = new MyInnerClass("b");public InitializationSequence() { System.out.println("构造函数"); } @SuppressWarnings("unused")public static void main(String[] args) { InitializationSequence obj01 = new InitializationSequence(); System.out.println("-----------------------------------"); InitializationSequence obj02 = new InitializationSequence(); } }class MyInnerClass {public MyInnerClass(String description) { System.out.println("成员变量初始化::" + description); } }
#執行結果:
##分析:
靜態語句區塊:在類別載入到JVM時執行,由於JVM使用類別的前提是類別裝載到JVM虛擬機,所以靜態語句區塊先執行,類別只載入一次,靜態語句區塊只執行一次。
靜態變數初始化:由於靜態變數為類別的所有實例所共享,不依賴特定的對象,因此不是在物件建立時初始化,而是在類別載入時初始化,初始化順序在靜態語句塊之後,只執行一次。
實例語句區塊:在建構方法前執行,每呼叫一次建構方法,執行一次。執行順序在靜態變數初始化之後,以成員變數初始化為參照,沒有絕對的先後順序,實際順序取決於定義的順序,定義在前,就在成員變數初始化前執行;定義在後,就在成員變數初始化後執行。
成員變數初始化:在建構方法前執行,每呼叫一次建構方法,執行一次。執行順序在靜態變數初始化之後,相對於實例語句區塊的執行順序取決於定義順序。
建構方法:最後執行。
綜上可知,java物件初始化的執行順序為:靜態語句區塊>靜態變數初始化>實例語句區塊/成員變數初始化>建構方法,實例語句區塊與成員變數初始化的相對執行順序取決於定義的先後順序。
#
以上是初始化java物件的順序的詳細內容。更多資訊請關注PHP中文網其他相關文章!