java編程思想5-初始化與清理

<meta charset="utf-8">

1 構(gòu)造器

不接受任何參數(shù)的構(gòu)造器叫做默認(rèn)構(gòu)造器躁绸,如果沒(méi)有編寫(xiě)構(gòu)造器,則會(huì)自動(dòng)創(chuàng)建無(wú)參構(gòu)造器臣嚣。如果有構(gòu)造器净刮,則不會(huì)自動(dòng)創(chuàng)建無(wú)參構(gòu)造器。

方法覆蓋:返回值類型茧球,參數(shù)個(gè)數(shù)庭瑰,參數(shù)類型都必須相同,且權(quán)限要大于等于父類權(quán)限

2 方法重載

方法名相同抢埋,形式參數(shù)不同。每一個(gè)重載的方法都必須有一個(gè)獨(dú)一無(wú)二的參數(shù)類型列表督暂。

參數(shù)順序也可以區(qū)分方法揪垄,但是會(huì)使代碼難以維護(hù)。

不可以用返回值區(qū)分重載方法逻翁。重載方法可以有不同的返回值饥努,但是參數(shù)列表一定不相同

void f(){}

int f(){}

如果可以上述例子的話,我們調(diào)用f() 并不知道調(diào)用哪個(gè)方法八回,所以沒(méi)有辦法區(qū)分方法酷愧。

涉及基本類型的重載

1 基本類型能從一個(gè)較小的類型自動(dòng)提升到一個(gè)較大的類型,此過(guò)程一旦牽涉到重載缠诅,可能會(huì)造成一些混淆溶浴。

三條規(guī)則

  • char byte short int long float double默認(rèn)找最小類型,沒(méi)有的話則提升
  • char如果沒(méi)有找到char參數(shù)的方法管引,會(huì)直接提升至int
  • byte short 一步一步提升士败,比如,如果沒(méi)有接收byte的參數(shù)方法 褥伴,但是有接收short參數(shù)的方法谅将,則會(huì)把byte提升到short。并調(diào)用接收short參數(shù)的方法

2 傳入的實(shí)際參數(shù)大于重載方法聲明的形式參數(shù)重慢,需要強(qiáng)制轉(zhuǎn)換較小的類型饥臂,進(jìn)行窄化轉(zhuǎn)換,不然編譯器就會(huì)報(bào)錯(cuò)

3 this關(guān)鍵字

只能在方法內(nèi)部使用似踱,表示對(duì)“調(diào)用方法的那個(gè)對(duì)象”的引用隅熙。

如果在方法內(nèi)部調(diào)用同一個(gè)類的另一個(gè)方法稽煤,不必使用this,直接調(diào)用即可猛们。當(dāng)前方法中的this引用會(huì)自動(dòng)應(yīng)用于同一類中的其他方法念脯。

public class A{

void pick)()

void pit(){ pick();}

}

可以寫(xiě)this.pick()但沒(méi)有必要,會(huì)自動(dòng)添加

用法:

1 返回對(duì)象引用 return this;

2 將當(dāng)前對(duì)象傳遞給其他方法: return Peller.peel(this); 調(diào)用另一個(gè)類的靜態(tài)方法弯淘,并把該類的對(duì)象傳遞過(guò)去绿店。

3 構(gòu)造器中調(diào)用構(gòu)造器:為了避免重復(fù)代碼。但是要注意的是庐橙,必須將構(gòu)造器調(diào)用置于最開(kāi)始處假勿,且只能用this調(diào)用一個(gè)構(gòu)造器,不能調(diào)用兩個(gè)态鳖。

4 帶表數(shù)據(jù)成員:this.s

4 static 的含義

static方法中沒(méi)有this转培。不能調(diào)用非靜態(tài)方法。而非靜態(tài)方法可以調(diào)用靜態(tài)方法浆竭。

5清理:終極處理和垃圾回收

finalize() 方法浸须,清理未使用對(duì)象(new)獲得的內(nèi)存資源。

垃圾回收三點(diǎn)概念

  • 對(duì)象可能不被垃圾回收:存儲(chǔ)空間沒(méi)有用完邦泄,對(duì)象就總也得不到釋放删窒。
  • 垃圾回收并不等于“析構(gòu)”
  • 垃圾回收只與內(nèi)存有關(guān):回收程序不再使用的內(nèi)存。

垃圾回收如何工作

垃圾回收對(duì)于提高對(duì)象的創(chuàng)建速度顺囊,有明顯的效果肌索。存儲(chǔ)空間的釋放會(huì)影像存儲(chǔ)空間的分配。java從堆分配空間的速度特碳,可以和其他語(yǔ)言從堆棧上分配空間的速度相媲美诚亚。

引用計(jì)數(shù)法:是一種簡(jiǎn)單但速度很慢的垃圾回收技術(shù),常用來(lái)說(shuō)明垃圾收集的工作方式午乓,但似乎從未被應(yīng)用于任何一種java虛擬機(jī)中站宗。

工作方式:每個(gè)對(duì)象含有一個(gè)引用計(jì)數(shù)器,當(dāng)引用連接對(duì)象硅瞧,引用計(jì)數(shù)加1份乒,引用離開(kāi)作用域或置為null,引用計(jì)數(shù)減1腕唧。引用計(jì)數(shù)為0時(shí)或辖,就釋放器占用的空間。

缺陷:如果對(duì)象質(zhì)檢存在循環(huán)引用枣接,可能會(huì)出現(xiàn)“對(duì)象應(yīng)該被回收颂暇,但引用計(jì)數(shù)卻為0”的情況。

另一種方式思想是:對(duì)任何活的對(duì)象但惶,一定能追溯到活在堆椂欤或靜態(tài)存儲(chǔ)區(qū)之中的引用湿蛔。由此如果從堆棧和靜態(tài)存儲(chǔ)區(qū)開(kāi)始,遍歷所有的引用县爬,就能找到所有活的對(duì)象阳啥。

對(duì)于發(fā)現(xiàn)的每個(gè)引用,必須追蹤它所引用的對(duì)象财喳,然后是此對(duì)象包含的所有引用察迟,如此反復(fù)下去,直到訪問(wèn)全部停止耳高。

基于上述思想是目前java虛擬機(jī)采用的思想扎瓶,由此得到自適應(yīng)垃圾回收技術(shù)

1 停止-復(fù)制(stop-and-copy) :先暫停程序的運(yùn)行,然后將所有存活的對(duì)象從當(dāng)前堆復(fù)制到另一個(gè)堆泌枪,沒(méi)有被賦值的全部都是垃圾概荷。復(fù)制新的堆的時(shí)候,保持緊密排列

這種方式效率低碌燕,原因:兩個(gè)堆之間來(lái)回挪動(dòng)误证,需要很多的空間,2 產(chǎn)生少量的垃圾時(shí)修壕,這種方式會(huì)非常浪費(fèi)

2標(biāo)記-清掃(mark-and-sweep):從堆棧和靜態(tài)存儲(chǔ)區(qū)出發(fā)雷厂,遍歷所有引用,找出存活的對(duì)象叠殷。每當(dāng)它找到一個(gè)活的對(duì)象,就給對(duì)象設(shè)置一個(gè)標(biāo)記诈皿。當(dāng)所有標(biāo)記工作完成時(shí)林束,清理

動(dòng)作才會(huì)開(kāi)始。沒(méi)有標(biāo)記的對(duì)象稽亏,將被釋放壶冒,不會(huì)發(fā)生任何復(fù)制動(dòng)作。所以剩下的堆空間是不連續(xù)的

兩個(gè)方法都必須在程序暫停的情況下進(jìn)行截歉。

對(duì)于第一個(gè)方法(stop-and-copy)胖腾,一些虛擬機(jī)解決方案是,內(nèi)存分配以較大的“塊”為單位瘪松。如果對(duì)象交大咸作,它會(huì)占用單獨(dú)的塊。每個(gè)塊都用相應(yīng)的代數(shù)記錄它是否存活宵睦。

如果塊在某處被引用记罚,代數(shù)就會(huì)增加。垃圾回收器將對(duì)上次回收動(dòng)作之后信分配的塊進(jìn)行整理壳嚎。這對(duì)處理大量短命的對(duì)象很有幫助桐智。垃圾回收器會(huì)定期進(jìn)行完整的清理

動(dòng)作--大型對(duì)象仍然不會(huì)被賦值(只是代數(shù)會(huì)增加)末早,內(nèi)含小型對(duì)象的那些塊則被賦值并整理。

如果所有對(duì)象都很穩(wěn)定说庭,垃圾回收器效率低的化然磷,就從停止-復(fù)制 切換到 標(biāo)記-清掃 方式。標(biāo)記清掃出現(xiàn)太多的垃圾碎片則再切換回停止-復(fù)制 方式刊驴。

6 初始化

初始化順序

1 靜態(tài)變量>成員變量>構(gòu)造器,

2 按照聲明順序初始化

靜態(tài)變量在類首次加載時(shí)初始化姿搜,并且只初始化一次。 成員變量和構(gòu)造器在new一個(gè)對(duì)象時(shí)初始化缺脉,可以初始化多次

靜態(tài)變量只占用一份存儲(chǔ)區(qū)域痪欲,static關(guān)鍵字不能應(yīng)用于局部變量。

image.png

顯示的靜態(tài)初始化-------靜態(tài)代碼塊攻礼,只執(zhí)行一次

非靜態(tài)實(shí)例初始化-------代碼塊业踢,用來(lái)初始化每一個(gè)對(duì)象的非靜態(tài)變量,這種語(yǔ)法對(duì)于支持“匿名內(nèi)部類”的初始化是必須的礁扮,在構(gòu)造器之前執(zhí)行知举。

數(shù)組初始化

  • Integer[] a = new Integer[數(shù)量] 初始化數(shù)組,并指定數(shù)組大小太伊。為其分配內(nèi)存空間雇锡,并初始化0 或null 或false。
  • Integer [] a = {} 在定義數(shù)組時(shí)就得指定元素僚焦,
  • Integer[] a = new Integer[]{} 這種方式不需要在定義數(shù)組引用時(shí)就初始化锰提。比如

a = new Integer[] {}; 可以分開(kāi)。是最靈活的初始化方式

可變參數(shù)列表

void printArray(Object... args) 該參數(shù)接收下面三種參數(shù)芳悲,并轉(zhuǎn)化成數(shù)組

1 傳多個(gè)參數(shù) printArray(1, 2, 3, 4)

2 傳一個(gè)數(shù)組 printArray((Object[]) new Integer[]{1, 2, 3, 4})

3 傳空List printArray()

重載時(shí)立肘,會(huì)出現(xiàn)問(wèn)題

void f(Character... args)

void f(Long... args)

void f(Integer... args)

此時(shí)我們不能使用空參調(diào)用方法,這樣會(huì)沒(méi)法編譯

void f(float, Character... args)

void f(Character... args)

上面方法不可以名扛,會(huì)報(bào)錯(cuò)

void f(float i, Character... args)

void f(char c, Character...args)

此方法為正確解法

重點(diǎn):所以谅年,我們應(yīng)該只在重載方法的一個(gè)版本上使用可變參數(shù)列表,或者壓根就不使用它

7 枚舉類型

public enum Spiciness{

NOT, MILD, MEDIUM

}

Spiciness s = Spiciness.MEDIUM;

for(Spiciness s : Spiciness.values()){ // 返回所有枚舉值

s.ordinal(); // s.ordinal() 枚舉的整數(shù)值

}

可以與switch一起使用

Spiciness degree

switch(degree){

case NOT: statement;

default: statement;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肮韧,一起剝皮案震驚了整個(gè)濱河市融蹂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弄企,老刑警劉巖超燃,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桩蓉,居然都是意外死亡淋纲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門院究,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洽瞬,“玉大人本涕,你說(shuō)我怎么就攤上這事』锴裕” “怎么了菩颖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)为障。 經(jīng)常有香客問(wèn)我晦闰,道長(zhǎng),這世上最難降的妖魔是什么鳍怨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任呻右,我火速辦了婚禮,結(jié)果婚禮上鞋喇,老公的妹妹穿的比我還像新娘声滥。我一直安慰自己,他們只是感情好侦香,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布落塑。 她就那樣靜靜地躺著,像睡著了一般罐韩。 火紅的嫁衣襯著肌膚如雪憾赁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天散吵,我揣著相機(jī)與錄音龙考,去河邊找鬼。 笑死矾睦,一個(gè)胖子當(dāng)著我的面吹牛洲愤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顷锰,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亡问!你這毒婦竟也來(lái)了官紫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤州藕,失蹤者是張志新(化名)和其女友劉穎束世,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體床玻,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毁涉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锈死。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贫堰。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡穆壕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出其屏,到底是詐尸還是另有隱情喇勋,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布偎行,位于F島的核電站川背,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蛤袒。R本人自食惡果不足惜熄云,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妙真。 院中可真熱鬧缴允,春花似錦、人聲如沸隐孽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菱阵。三九已至踢俄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晴及,已是汗流浹背都办。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留虑稼,地道東北人琳钉。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛛倦,于是被迫代替她去往敵國(guó)和親歌懒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容