初始化與清理
- 創(chuàng)建一個(gè)類,它包含一個(gè)在定義時(shí)就被初始化了的String域,以及另一個(gè)通過構(gòu)造器初始化的String域.這兩種方式有何差異?
<個(gè)人認(rèn)為就是一個(gè)定義時(shí)就初始化的String域就是在類中添加一個(gè)Static的變量 而通過構(gòu)造器初始化的String是通過傳參或者就是在類中定義一個(gè)String>
class Rock{
Rock(){
//第一種情況就是定義一個(gè)String
String a = "1234";//此時(shí)需要new一個(gè)Rock才會(huì)有a 的初始化
//第二種情況就是static
static String a = "1234";//只要用到關(guān)于Rock這個(gè)應(yīng)用或者對(duì)象就會(huì)初始化這個(gè)a
System.out.pritnln("Rock ");
}
}
public class SimpleConstructor{
public static void main(String[] args){
new Rock();
}
}
- 區(qū)分重載方法:每個(gè)重載的方法都必須有一個(gè)獨(dú)一無二的參數(shù)類型列表
注意:甚至參數(shù)順序的不同也足以區(qū)分兩個(gè)方法。不過,一般情況下別這樣做,因?yàn)檫@會(huì)使代碼難以維護(hù)。通過返回值來區(qū)分重載方法是行不通的。
- static 是靜態(tài)方法,盡量用類名來調(diào)用,類似于全局變量。它沒有this方法
- 清理:終結(jié)處理和垃圾回收
- 對(duì)象<b>可能</b>不被垃圾回收
- 垃圾回收并不等于“析構(gòu)”
- 垃圾回收只與內(nèi)存有關(guān)//也就是說,使用垃圾回收器的唯一原因是為了回收程序不再使用的內(nèi)存。
- 記住,無論是“垃圾回收”還是“終結(jié)”,都不保證一定會(huì)發(fā)生。如果java虛擬機(jī)JVM 并未面臨內(nèi)存耗盡的情形,他是不會(huì)浪費(fèi)時(shí)間去執(zhí)行垃圾回收以恢復(fù)內(nèi)存的。
- 垃圾回收器如何工作
Java虛擬機(jī)會(huì)進(jìn)行見識(shí),如果所有對(duì)象都很穩(wěn)定,垃圾回收器的效率降低的話,就會(huì)切換到“標(biāo)記-清理”方式;同樣,Java虛擬機(jī)會(huì)跟蹤“標(biāo)記-清掃”的效果,要是堆空間出現(xiàn)很多碎片,就會(huì)切換回“停止-復(fù)制”方式。這就是自適應(yīng)技術(shù)。
- 初始化順序是先靜態(tài)對(duì)象(如果它們尚未因前面的對(duì)象創(chuàng)建過程而被初始化),而后是“非靜態(tài)”對(duì)象。從輸出結(jié)果中可以觀察到這一點(diǎn)。在初始化一個(gè)類時(shí)先初始化構(gòu)造器外的靜態(tài)函數(shù)然后初始化非靜態(tài)的函數(shù),不管是在構(gòu)造器前還是在后。
- 總結(jié)一下對(duì)象創(chuàng)建過程
假設(shè)有名為Dog的類- 即使沒有顯示地使用static關(guān)鍵字,構(gòu)造器實(shí)際上也是靜態(tài)方法。因此當(dāng)首次創(chuàng)建類型為Dog的對(duì)象時(shí)(構(gòu)造器可以看成靜態(tài)方法),或者Dog類的靜態(tài)方法/靜態(tài)域首次被訪問時(shí)Java解釋器必須查找類路徑,以定位Dog.class文件
- 然后載入Dog.class(后面會(huì)學(xué)到,浙江創(chuàng)建一個(gè)Class對(duì)象),有關(guān)靜態(tài)初始化的所有動(dòng)作都會(huì)執(zhí)行.因此,靜態(tài)初始化只在Class對(duì)象首次加載的時(shí)候進(jìn)行一次.
- 當(dāng)用new Dog()創(chuàng)建對(duì)象的時(shí)候,首先將在堆上為Dog對(duì)象分配足夠的存儲(chǔ)空間.
- 這塊存儲(chǔ)空間會(huì)被清零,這就自動(dòng)地將Dog對(duì)象中的所有基本類型數(shù)據(jù)都設(shè)置成了默認(rèn)值(對(duì)數(shù)字來說就是0,對(duì)布爾類型和字符型也相同),而引用則被設(shè)置成了null.
- 執(zhí)行所有出現(xiàn)于字段定義處的初始化動(dòng)作.
- 執(zhí)行構(gòu)造器.正如將在第七章所看到的,這可能會(huì)牽涉到很多動(dòng)作尤其是涉及到繼承的時(shí)候.