參考文獻(xiàn):
創(chuàng)新互聯(lián)建站是專業(yè)的淄博網(wǎng)站建設(shè)公司,淄博接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行淄博網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!域初始化Java核心技術(shù)卷一
Java程序的初始化順序
Java 代碼塊和類的執(zhí)行調(diào)用順序
類的加載與初始化
如果在構(gòu)造器中沒(méi)有顯式地給域賦予初值,那么就會(huì)被自動(dòng)地賦為默認(rèn)值: 數(shù)值為 0、
布爾值為 false、 對(duì)象引用為 null。
也可以直接在實(shí)例域中設(shè)置一個(gè)有意義的初值,在執(zhí)行構(gòu)造器之前,先執(zhí)行賦值操作,將所有類對(duì)象的該域設(shè)置為一樣的值。比如:
class Employee
{private String name ="JXZ";
}
構(gòu)造器如果在編寫(xiě)一個(gè)類時(shí)沒(méi)有編寫(xiě)構(gòu)造器, 那么系統(tǒng)就會(huì)提供一個(gè)無(wú)參數(shù)構(gòu)造器。這個(gè)構(gòu)造
器將所有的實(shí)例域設(shè)置為默認(rèn)值。
僅當(dāng)類沒(méi)有提供任何構(gòu)造器的時(shí)候, 系統(tǒng)才會(huì)提供一個(gè)默認(rèn)的構(gòu)造器。如果類中提供了至少一個(gè)構(gòu)造器, 但是沒(méi)有提供無(wú)參數(shù)的構(gòu)造器, 則在構(gòu)造對(duì)象時(shí)如果沒(méi)有提供參數(shù)就會(huì)被視為不合法。比如在編寫(xiě)類的時(shí)候,已經(jīng)給出了一個(gè)簡(jiǎn)單的構(gòu)造器,但是想用new ClassName()
構(gòu)造實(shí)例,就必須提供一個(gè)默認(rèn)的構(gòu)造器(即不帶參數(shù)的構(gòu)造器),如果希望所有域被賦予默認(rèn)值, 可以采用下列格式:
public ClassName(){}
關(guān)鍵字 this 代表引用方法的隱式參數(shù)。但其還有一層用法,如果構(gòu)造器的第一條語(yǔ)句形如this(...)
(如果這樣使用,也只能放在第一條語(yǔ)句), 這個(gè)構(gòu)造器將調(diào)用同一個(gè)類的另一個(gè)構(gòu)造器。比如:
public Employee(double s)
{// 這里就會(huì)調(diào)用Employee(String, double)
this("Employee #" + nextld, s);
nextld++;
}
初始化塊在一個(gè)類的聲明中,可以包含多個(gè)代碼塊,只要構(gòu)造類的對(duì)象(實(shí)例化),這些塊就會(huì)被執(zhí)行,在下面有個(gè)例子中可以看到,裝載類但沒(méi)有實(shí)例化類的時(shí)候,這些普通代碼塊并沒(méi)有被執(zhí)行,與之相對(duì)的是靜態(tài)代碼塊執(zhí)行了。
class Employee
{private static int nextld;
private int id;
private String name;
private double salary;
// object initialization block
{id = nextld;
nextld++;
}
}
《Java核心技術(shù)卷一》中對(duì)調(diào)用構(gòu)造器的相關(guān)步驟總結(jié)如下:
在加入父子類以及靜態(tài)代碼塊后,初始化順序就復(fù)雜一點(diǎn)了,參考Java程序的初始化順序總結(jié)如下:
靜態(tài)優(yōu)于非靜態(tài),先父后子,域聲明優(yōu)于塊,最后構(gòu)造器
實(shí)例代碼:
public class InitOrderDemo {public InitOrderDemo() {System.out.println("父類構(gòu)造方法");
}
String b = "父類非靜態(tài)變量";
{System.out.println(b);
System.out.println("父類非靜態(tài)代碼塊");
}
static String a = "父類靜態(tài)變量";
static {System.out.println(a);
System.out.println("父類靜態(tài)代碼塊");
}
public static void superMethod() {System.out.println("父類普通靜態(tài)方法");
}
}
public class Derived extends InitOrderDemo {public Derived() {System.out.println("子類構(gòu)造方法");
}
String b = "子類非靜態(tài)變量";
{System.out.println(b);
System.out.println("子類非靜態(tài)代碼塊");
}
static String a = "子類靜態(tài)變量";
static {System.out.println(a);
System.out.println("子類靜態(tài)代碼塊");
}
public static void derivedMethod() {System.out.println("子類普通靜態(tài)方法");
}
public static void main(String[] args) {// InitOrderDemo.superMethod();
Derived.derivedMethod();
// new Derived();
}
}
執(zhí)行輸出如下:
InitOrderDemo.superMethod()
:
父類靜態(tài)變量
父類靜態(tài)代碼塊
子類靜態(tài)變量
子類靜態(tài)代碼塊
父類普通靜態(tài)方法
Derived.derivedMethod()
:
父類靜態(tài)變量
父類靜態(tài)代碼塊
子類靜態(tài)變量
子類靜態(tài)代碼塊
子類普通靜態(tài)方法
new Derived()
:
父類靜態(tài)變量
父類靜態(tài)代碼塊
子類靜態(tài)變量
子類靜態(tài)代碼塊
父類非靜態(tài)變量
父類非靜態(tài)代碼塊
父類構(gòu)造方法
子類非靜態(tài)變量
子類非靜態(tài)代碼塊
子類構(gòu)造方法
其中InitOrderDemo.superMethod()
和Derived.derivedMethod()
的打印只打印出了靜態(tài)變量和靜態(tài)代碼塊,和裝載時(shí)域的初始化有關(guān)。參考類的加載與初始化
同時(shí)參考代碼塊的兩個(gè)注意事項(xiàng):
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前標(biāo)題:Java中的對(duì)象構(gòu)造與初始化順序-創(chuàng)新互聯(lián)
文章來(lái)源:http://aaarwkj.com/article8/ccohip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、域名注冊(cè)、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、面包屑導(dǎo)航、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容