java物件初始化過程

2021-09-01 00:20:48 字數 739 閱讀 3529

假設有一下類:

class test;

test() {}

int n =0;

}

我們知道,任何物件在使用前都會被初始化,方法裡面的區域性變數必須給初始化值才能通過編譯。

現在我們來討論一下初始化的過程:

對於字段(變數)而言,如果是基本型別,那麼即使不給初始值,都會得到jvm預設的初始值:boolean預設是false,byte、short、int、long是0,double和float是0.0,char為/u0000(很早的jvm賦值為0),如果是物件,比如 test test;列印test則出現null,這樣子就不難理解為什麼我們用system.out列印物件的時候,會得到物件的位址。 

在類的內部,變數定義的順序決定了初始化的順序:int i定義在int j前,i先得到初始化值。

所有變數都會在方法、包括構造方法被呼叫前得到初始化。

無論建立多少個物件,靜態資料都只占有乙份儲存區域(靜態變數和方法屬於類),static不能用於區域性變數。

對於物件的初始化,也先是靜態物件在前,

那麼這裡可能就有乙個疑問:靜態方法和普通變數,誰先是被初始化呢?答案其實我意見說了,還是變數先初始化。

事實上,構造方法也是靜態方法,只是沒有寫明static而已,所有的變數都會在構造器(靜態方法之前執行)。

在一些類裡,會有靜態**塊,即static,靜態**塊會有限執行(同為靜態**塊按順序執行),和靜態初始化動作一樣,只執行一次。

Java物件的初始化過程

person p new person zhangsan 20 執行該語句時虛擬機器做了什麼事情?1.因為new用到了person.class檔案,所以會先找到該檔案載入到記憶體中 2 執行該類中的static 塊 如果有的話 給person.class類進行初始化 3 在堆記憶體中開闢空間,分配記...

Java 初始化過程

初始化過程 載入器啟動並且找出匯出類derived的編譯 即名為derived.class的檔案之中 在對它載入的過程中,編譯器注意到它有乙個基類,於是繼續進行基類的載入 基類中的static變數初始化,然後是匯出類的static 如果乙個成員被宣告為 static,它就能夠在它的類的任何物件建立之...

java 初始化過程

初始化的過程 static靜態塊 父類的靜態塊 子類的靜態塊 父類的初始化塊 父類的建構函式 子類的初始化塊 子類的建構函式 舉例說明 class helloa static public class hellob extends helloa static public static void m...