官术网_书友最值得收藏!

1.1 Java程序初始化的順序

在Java語言中,當實例化對象時,對象所在類的所有成員變量首先要進行初始化,只有當所有類成員完成初始化后,才會調用對象所在類的構造函數創建對象。

Java程序的初始化一般遵循以下三個原則(以下三個原則優先級依次遞減):1)靜態對象(變量)優先于非靜態對象初始化,其中,靜態對象(變量)只初始化一次,而非靜態對象(變量)可能會初始化多次。2)父類優先于子類進行初始化。3)按照成員變量定義順序進行初始化。即使變量定義散布于方法定義之中,它們依然在任意方法(包括構造方法)被調用之前先進行初始化。

Java程序的初始化工作可以在許多不同的代碼塊中來完成(例如:靜態代碼塊、構造函數等),它們執行的順序為:父類靜態變量→父類靜態代碼塊→子類靜態變量→子類靜態代碼→父類非靜態變量→父類非靜態代碼塊→父類構造方法→子類非靜態變量→子類非靜態代碼塊→子類構造方法。下面給出一個不同模塊初始化時執行順序的例子。

程序運行結果為:

這里需要注意的是,(靜態)非靜態成員域在定義時初始化和(靜態)非靜態塊中初始化的優先級是平級的,也就是說按照從上到下初始化,最后一次初始化為最終的值(不包括非靜態的成員域在構造器中初始化)。所以在(靜態)非靜態塊中初始化的域甚至能在該域聲明的上方,因為分配存儲空間在初始化之前就完成了。如下例所示:

程序運行結果為:

主站蜘蛛池模板: 玛曲县| 河北省| 邮箱| 大庆市| 平舆县| 岚皋县| 金华市| 红原县| 金昌市| 松桃| 基隆市| 肥东县| 夏邑县| 望谟县| 宁明县| 微山县| 辽宁省| 微博| 澳门| 抚顺县| 临西县| 兰溪市| 饶阳县| 清原| 开封市| 连南| 蒙山县| 东明县| 金山区| 九寨沟县| 四会市| 峨山| 东平县| 安义县| 阜阳市| 博乐市| 青岛市| 锡林浩特市| 璧山县| 肥乡县| 无锡市|