- Java程序員面試筆試寶典(第2版)
- 何昊等編著
- 563字
- 2022-06-17 16:00:39
1.1 Java程序初始化的順序
在Java語言中,當實例化對象時,對象所在類的所有成員變量首先要進行初始化,只有當所有類成員完成初始化后,才會調用對象所在類的構造函數創建對象。
Java程序的初始化一般遵循以下三個原則(以下三個原則優先級依次遞減):1)靜態對象(變量)優先于非靜態對象初始化,其中,靜態對象(變量)只初始化一次,而非靜態對象(變量)可能會初始化多次。2)父類優先于子類進行初始化。3)按照成員變量定義順序進行初始化。即使變量定義散布于方法定義之中,它們依然在任意方法(包括構造方法)被調用之前先進行初始化。
Java程序的初始化工作可以在許多不同的代碼塊中來完成(例如:靜態代碼塊、構造函數等),它們執行的順序為:父類靜態變量→父類靜態代碼塊→子類靜態變量→子類靜態代碼→父類非靜態變量→父類非靜態代碼塊→父類構造方法→子類非靜態變量→子類非靜態代碼塊→子類構造方法。下面給出一個不同模塊初始化時執行順序的例子。


程序運行結果為:

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

程序運行結果為:

推薦閱讀
- 從零開始構建企業級RAG系統
- Java程序設計(慕課版)
- LabVIEW Graphical Programming Cookbook
- 精通API架構:設計、運維與演進
- Modern JavaScript Applications
- Getting Started with LLVM Core Libraries
- Buildbox 2.x Game Development
- Mastering Elixir
- 工業機器人離線編程
- Python趣味編程與精彩實例
- IoT Projects with Bluetooth Low Energy
- Java7程序設計入門經典
- Julia數據科學應用
- Qt 4開發實踐
- Java RESTful Web Service實戰