Java的对象初始化过程
成員變量(字段)初始化順序
在一個類里初始化的順序是由成員變量在類里面的定義的順序來決定的。即使成員變量大量散布于類的各個方法定義的中間,那些成員變量仍會在調(diào)用任何方法之前得以初始化,甚至在構(gòu)造函數(shù)調(diào)用之前。
若數(shù)據(jù)是靜態(tài)的(static),那么同樣的事情就會發(fā)生;如果它屬于一個基本類型(主類型),而且未對其初始化,就會自動獲得自己的標(biāo)準(zhǔn)基本類型初始值;如果它是指向一個對象的句柄,那么除非新建一個對象,并將句柄同它連接起來,否則就會得到一個空值(NULL)。
static 初始化只有在必要的時候才會進行。如果不創(chuàng)建一個Table 對象,而且永遠(yuǎn)都不引用Table.b1 或Table.b2,那么static Bowl b1 和b2 永遠(yuǎn)都不會創(chuàng)建
?
對象創(chuàng)建過程
找到Dog.class 后(它會創(chuàng)建一個Class 對象),它的所有static 初始化模塊都會運行。因此,static 初始化僅發(fā)生一次——在Class 對象首次載入的時候;
創(chuàng)建一個new Dog()時,Dog 對象的構(gòu)建進程首先會在內(nèi)存堆(Heap)里為一個Dog 對象分配足夠多的存儲空間;
這種存儲空間會清為零,將Dog 中的所有基本類型(Primitive)設(shè)為它們的默認(rèn)值(0用于數(shù)字,以及boolean 和char 的等價設(shè)定);
進行成員字段定義時發(fā)生的所有初始化都會執(zhí)行;
執(zhí)行構(gòu)造函數(shù)。
?
?static構(gòu)建從句
class Spoon {static int i;static {i = 47;}// . . .盡管看起來象個方法,但它實際只是一個static關(guān)鍵字,后面跟隨一個方法主體。與其他static初始化一樣,這段代碼僅執(zhí)行一次——首次生成那個類的一個對象時,或者首次訪問屬于那個類的一個static 成員時(即便從未生成過那個類的對象)
總結(jié)
以上是生活随笔為你收集整理的Java的对象初始化过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全文检索引擎Solr系列——Solr核心
- 下一篇: Java异常与运行时异常,以及与线程的关