實(shí)例解析Java中的構(gòu)造器初始化
1.初始化順序
當(dāng)Java創(chuàng)建一個(gè)對(duì)象時(shí),系統(tǒng)先為該對(duì)象的所有實(shí)例屬性分配內(nèi)存(前提是該類(lèi)已經(jīng)被加載過(guò)了),接著程序開(kāi)始對(duì)這些實(shí)例屬性執(zhí)行初始化,其初始化順序是:先執(zhí)行初始化塊或聲明屬性時(shí)制定的初始值,再執(zhí)行構(gòu)造器里制定的初始值。 在類(lèi)的內(nèi)部,變量定義的先后順序決定了初始化的順序,即時(shí)變量散布于方法定義之間,它們?nèi)跃蜁?huì)在任何方法(包括構(gòu)造器)被調(diào)用之前得到初始化。
class Window {
Window(int maker) {
System.out.println("Window(" + maker + ")");
}
}
class House {
Window window1 = new Window(1);
House() {
System.out.println("House()");
w3 = new Window(33);
}
Window window2 = new Window(2);
void f() {
System.out.println("f()");
}
Window w3 = new Window(3);
}
public class OrderOfInitialization {
public static void main(String[] args) {
House h = new House();
h.f();
}
}
運(yùn)行結(jié)果:
Window(1) Window(2) Window(3) House() Window(33) f()
由輸出可見(jiàn),w3這個(gè)引用會(huì)被初始化兩次:一次在調(diào)用構(gòu)造器之前,一次在調(diào)用期間(第一次引用的對(duì)象將被丟棄,并作為垃圾回收)。
2.靜態(tài)數(shù)據(jù)的初始化
無(wú)論創(chuàng)建多少個(gè)對(duì)象,靜態(tài)數(shù)據(jù)都只占一份存儲(chǔ)區(qū)域。static關(guān)鍵字不能應(yīng)用于局部變量,因此它只能作用于域。
class Bowl {
Bowl(int maker) {
System.out.println("Bowl(" + maker + ")");
}
void f1(int maker) {
System.out.println("f1(" + maker + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1);
Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int maker) {
System.out.println("f2(" + maker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard() {
System.out.println("CupBoard()");
bowl4.f1(2);
}
void f3(int maker) {
System.out.println("f3(" + maker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("created new Cupboard() in main");
new Cupboard();
System.out.println("created new Cupboard in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}
運(yùn)行結(jié)果:
Bowl(1) Bowl(2) Table() f1(1) Bowl(4) Bowl(5) Bowl(3) CupBoard() f1(2) created new Cupboard() in main Bowl(3) CupBoard() f1(2) created new Cupboard in main Bowl(3) CupBoard() f1(2) f2(1) f3(1)
從某種程度上來(lái)看,初始化是一段固定執(zhí)行的代碼,它不能接受任何參數(shù)。因此初始化塊對(duì)同一個(gè)類(lèi)所有對(duì)象所進(jìn)行的初始化處理完全相同?;谶@個(gè)原因,不難發(fā)現(xiàn)初始化塊的基本用法,如果有一段初始化處理代碼對(duì)所有對(duì)象完全相同,且無(wú)須接受任何參數(shù),就可以把這段初始化處理代碼提取到初始化塊中。
以上就是本文關(guān)于實(shí)例解析Java中的構(gòu)造器初始化的全部?jī)?nèi)容,希望對(duì)大家有所幫助。
相關(guān)文章
Java里得到00:00:00格式的時(shí)分秒的Timestamp
Java里如何得到00:00:00格式的時(shí)分秒的Timestamp ,下面是具體的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2009-09-09
SpringBoot在IDEA中實(shí)現(xiàn)熱部署(JRebel實(shí)用版)
這篇文章主要介紹了SpringBoot在IDEA中實(shí)現(xiàn)熱部署(JRebel實(shí)用版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Java JDK1.7對(duì)字符串的BASE64編碼解碼方法
今天小編就為大家分享一篇Java JDK1.7對(duì)字符串的BASE64編碼解碼方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Android?Studio中創(chuàng)建java工程的完整步驟
Android?Studio創(chuàng)建java工程是非常麻煩的,因?yàn)锳ndroid?Studio沒(méi)有提供直接創(chuàng)建java工程的方法,下面這篇文章主要給大家介紹了關(guān)于Android?Studio中創(chuàng)建java工程的完整步驟,需要的朋友可以參考下2024-01-01
java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法
這篇文章主要介紹了java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法,實(shí)例分析了java操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
使用Java編寫(xiě)GUI對(duì)話(huà)框的教程
這篇文章主要介紹了使用Java編寫(xiě)GUI對(duì)話(huà)框的教程,是Java圖形化編程中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
mybatis-plus插入一條數(shù)據(jù),獲取插入數(shù)據(jù)自動(dòng)生成的主鍵問(wèn)題
這篇文章主要介紹了mybatis-plus插入一條數(shù)據(jù),獲取插入數(shù)據(jù)自動(dòng)生成的主鍵問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
springboot 在idea中實(shí)現(xiàn)熱部署的方法
這篇文章主要介紹了springboot 在idea中實(shí)現(xiàn)熱部署的方法,實(shí)現(xiàn)了熱部署,在每一次作了修改之后,都會(huì)自動(dòng)的重啟,非常節(jié)約時(shí)間,感興趣的小伙伴們可以參考一下2018-10-10
MySQL數(shù)據(jù)庫(kù)之Purge死鎖問(wèn)題解析
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)之Purge死鎖問(wèn)題解析的相關(guān)資料,需要的朋友可以參考下2017-11-11
Java超詳細(xì)講解如何生成隨機(jī)整數(shù)
在?Java?中,生成隨機(jī)數(shù)的場(chǎng)景有很多,所以本文我們就來(lái)盤(pán)點(diǎn)一下?幾種生成隨機(jī)數(shù)的方式,以及它們之間的區(qū)別和每種生成方式所對(duì)應(yīng)的場(chǎng)景2022-05-05

