1.比較對(duì)象和基本類型
==和!= 比較的是對(duì)象的引用。equals()比較的是對(duì)象的內(nèi)容。 基本類型可以直接用==和!=比較
如果在自己寫的類中。必須覆蓋equals() 因?yàn)閑quals()默認(rèn)比較的是引用
大多數(shù)的java類庫(kù)都實(shí)現(xiàn)了equals()方法,以便用來(lái)比較對(duì)象的內(nèi)容,而非比較的引用。
2. 標(biāo)簽,break,continue
demo: label1:
outer-iteration{
inner-iteration{
break; // (1)
continue; //(2)
continue label1;(3)
break label1;(4)
}
}
在(1)中,break中斷內(nèi)部迭代,回到外部迭代。在(2)中,continue使執(zhí)行點(diǎn)移回內(nèi)部迭代的起始處。
在(3)中,continue label1 同時(shí)中斷內(nèi)部迭代以及外部迭代,直接轉(zhuǎn)到label1處,繼續(xù)從外部迭代繼續(xù)迭代過(guò)程。
在(4)中,break label1 中斷所有迭代,并回到label1處但并不重新進(jìn)入迭代,完全中止了兩個(gè)迭代。
3.對(duì)象創(chuàng)建過(guò)程
1)首次創(chuàng)建對(duì)象時(shí),或者類的靜態(tài)方法/靜態(tài)域首次被訪問(wèn)時(shí),java解釋器必須炒作類路徑,定位類.class文件。(構(gòu)造器可以看成靜態(tài)方法)
2)然后載入類.class文件,有關(guān)靜態(tài)初始化的所有動(dòng)作都會(huì)執(zhí)行,因此,靜態(tài)初始化只在class對(duì)象首次加載的時(shí)候進(jìn)行一次。
3)當(dāng)用new 類()創(chuàng)建對(duì)象的時(shí)候,首先將在堆上為類對(duì)象分配足夠的存儲(chǔ)空間。
4)這塊存儲(chǔ)空間會(huì)被清零,這就自動(dòng)地將類對(duì)象中的所有基本類型數(shù)據(jù)都設(shè)置成了默認(rèn)值,而引用則被設(shè)置成為null.
5)執(zhí)行所有出現(xiàn)于字段定義初的初始化動(dòng)作
6)執(zhí)行構(gòu)造器
4.構(gòu)造器的調(diào)用順序
基類的構(gòu)造器總是在導(dǎo)出類的構(gòu)造過(guò)程中被調(diào)用,而且按照繼承層次逐漸向上鏈接,以使每個(gè)基類的構(gòu)造器都能得到調(diào)用。
1)調(diào)用基類構(gòu)造器。這個(gè)步驟會(huì)不斷地反復(fù)遞歸下去,首先是構(gòu)造這種層次結(jié)構(gòu)的根,然后是下一層導(dǎo)出類,等等,知道最底層的導(dǎo)出類。
2)按聲明順序調(diào)用成員的初始化方法。
3)調(diào)用導(dǎo)出類構(gòu)造器的主體。
5.編寫構(gòu)造器的準(zhǔn)則
用盡可能簡(jiǎn)單的方法使對(duì)象進(jìn)入正常狀態(tài);如果可以的話,避免調(diào)用其他方法。(在構(gòu)造器內(nèi)唯一能夠安全調(diào)用的那些方法是基類中的final方法,也適用于private方法,這些方法不能被覆蓋。因此是安全的。)
6.內(nèi)部類
可以將一個(gè)類的定義放在另一個(gè)類的定義內(nèi)部,這就是內(nèi)部類。
內(nèi)部類的作用:
1)隱藏名字和組織代碼
2)當(dāng)生成一個(gè)內(nèi)部類的對(duì)象時(shí),此對(duì)象與制造它的外圍對(duì)象之間就有了一種聯(lián)系,所以它能訪問(wèn)其外圍對(duì)象的所有成員,而不需要任何特殊條件。此外,內(nèi)部類還擁有其外圍類的所有元素的訪問(wèn)權(quán)。
內(nèi)部類如何做到自動(dòng)擁有對(duì)其外圍類所有成員的訪問(wèn)權(quán):
當(dāng)某個(gè)外圍類的對(duì)象創(chuàng)建了一個(gè)內(nèi)部類對(duì)象時(shí),此內(nèi)部類對(duì)象必定會(huì)秘密地捕獲一個(gè)指向那個(gè)外圍類對(duì)象的引用。然后,在你訪問(wèn)此外圍類的成員時(shí),就是用那個(gè)引用來(lái)選擇外圍類的成員。編譯器會(huì)幫你處理所有的細(xì)節(jié)。
使用.this與.new
如果你需要生成對(duì)外部類對(duì)象的引用,可以使用外部類的名字后面緊跟圓點(diǎn)和this.這樣產(chǎn)生的引用自動(dòng)地具有正確的類型。
有時(shí)你可能想要告知某些其他對(duì)象,去創(chuàng)建其某個(gè)內(nèi)部類的對(duì)象。要實(shí)現(xiàn)此目的,你必須在new表達(dá)式中提供對(duì)其他外部類對(duì)象的引用,這時(shí)需要.new .
7.嵌套類:
如果不需要內(nèi)部類對(duì)象與其外圍類對(duì)象之間有聯(lián)系,那么可以將內(nèi)部類聲明為static.這通常稱為嵌套類。
普通的內(nèi)部類對(duì)象隱式地保存了一個(gè)引用,指向創(chuàng)建它的外圍類對(duì)象。然而,當(dāng)內(nèi)部類是static時(shí),就不這樣了。
嵌套類意味著:
1)要?jiǎng)?chuàng)建嵌套類的對(duì)象,并不需要其外圍類的對(duì)象。
2)不能從嵌套類的對(duì)象中訪問(wèn)非靜態(tài)的外圍類對(duì)象。
嵌套類與普通的內(nèi)部類還有一個(gè)區(qū)別。普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通內(nèi)部類不能有static數(shù)據(jù)和static字段,也不能包含嵌套類。但是嵌套類可以包含所有這些東西。
內(nèi)部類的特性:
1)內(nèi)部類可以有多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與其外圍類對(duì)象的信息相互獨(dú)立。
2)在單個(gè)外圍類中,可以讓多個(gè)內(nèi)部類以不同的方式實(shí)現(xiàn)同一個(gè)接口,或基礎(chǔ)層同一個(gè)類。
3)創(chuàng)建內(nèi)部類對(duì)象的時(shí)刻并不依賴于外圍類對(duì)象的創(chuàng)建。
4)內(nèi)部類并沒(méi)有令人迷惑的is-a 關(guān)系,它就是一個(gè)獨(dú)立的實(shí)體。
8.數(shù)組
無(wú)論使用哪種類型的數(shù)組,數(shù)組標(biāo)識(shí)符其實(shí)只是一個(gè)引用,指向在堆中創(chuàng)建的一個(gè)真實(shí)對(duì)象,這個(gè)(數(shù)組)對(duì)象用以保存指向其他對(duì)象的引用。
對(duì)象數(shù)組和基本類型數(shù)組在使用上幾乎是相同的;唯一的區(qū)別就是對(duì)象數(shù)組保存的是引用,基本類型數(shù)組直接保存基本類型的值。
9.枚舉類型
關(guān)鍵字enum可以將一組具名的值的有限集合創(chuàng)建為一種新的類型,而這些具名的值可以作為常規(guī)的程序組件使用。
switch語(yǔ)句中的enum.
enumMap是一種特殊的map,它要求其中的鍵(key)必須來(lái)自一個(gè)enum.由于enum本身的限制,所以enumMap在內(nèi)部可由數(shù)組實(shí)現(xiàn)。因此enumMap的速度很快,我們可以放心地使用enum實(shí)例在enumMap中進(jìn)行查找操作。不過(guò),我們只呢將enum實(shí)例作為鍵來(lái)調(diào)用put()方法,其他操作與使用一般m
ap差不多。
10.注解
注解(也被稱為元數(shù)據(jù))為我們?cè)诖a中添加信息提供了一種形式化方法,使我們可以在稍后某個(gè)時(shí)刻非常方便地使用這些數(shù)據(jù)。
@Override:表示當(dāng)前的方法定義將覆蓋超類中的方法。拼寫錯(cuò)誤和方法對(duì)不上,編譯器會(huì)發(fā)出錯(cuò)誤提示。
@Deprecated: 如果程序員使用了注解為它的元素,編譯器會(huì)發(fā)出警告信息。
@SuppressWarinings: 關(guān)閉不當(dāng)?shù)木幾g警告信息。