《疯狂Java讲义》5
目錄
toString方法
final
抽象類和抽象方法
toString方法
????先看一個(gè)程序:
結(jié)果如下:
可以看到,上面的程序和我們想要的結(jié)果并不一樣,上面實(shí)際上是輸出了p引用的Person對(duì)象。我們想要的結(jié)果是“Java",這里涉及到了toString()方法。所以下面兩行代碼的效果一樣:
結(jié)果如下:
這個(gè)方法是Object類里的一個(gè)實(shí)例方法,所有的Java類里都有這個(gè)方法。Object類提供的toString()方法總是返回該對(duì)象實(shí)現(xiàn)類的"類名+@+hashCode"值,但是這個(gè)返回值并不是我們想要的真正的內(nèi)容。如果想輸出"Java"這個(gè)字符串,我們就要重寫Object類里的toString()方法。
舉個(gè)栗子:
結(jié)果如下:
????實(shí)際上,toString()方法是一種“自我描述”方法,只不過(guò)沒(méi)有重寫的話,不能描述成我們想要看到的結(jié)果。
final
????1.final修飾的成員變量必須被程序員顯式地賦初值;
????2.使用final修飾的形參不能被賦初值;
????3.final修基本類型變量和引用類型變量的區(qū)別:
????我們用程序來(lái)進(jìn)行說(shuō)明:
結(jié)果如下:
兩個(gè)被注釋掉的認(rèn)為是非法的代碼報(bào)錯(cuò)如下:
????這個(gè)就很好理解了,主要就是看final修飾的是誰(shuí),修飾誰(shuí)誰(shuí)不能變,但是其他可以變。簡(jiǎn)單變量很好理解,引用變量就要注意不能變的是引用地址,而不是引用對(duì)象。
4.可執(zhí)行“宏替換”的final變量
????對(duì)一個(gè)final來(lái)說(shuō),不管他是類變量、實(shí)力變量、還是局部變量,只要該變量滿足以下三個(gè)條件,這個(gè)final變量就不再是一個(gè)變量,而是一個(gè)直接量:
(1)被final修飾符修飾;
(2)定義該變量時(shí)指定了初始值;
(3)該初始值可以在編譯時(shí)就被確定下來(lái)。
eg:final? int??age = 5;運(yùn)算表達(dá)式不,除了這種直接給一個(gè)值得情況,如果等號(hào)后面是一個(gè)運(yùn)算表達(dá)式,簡(jiǎn)單的連接式,沒(méi)有訪問(wèn)普通變量、調(diào)用方法,也看作是“宏變量”。
舉個(gè)例子:
結(jié)果如下:
我們?cè)倏匆粋€(gè)栗子:
結(jié)果如下:
????也就是說(shuō),c和d并不相等。這里的a,b,c在編譯時(shí)可以確定下來(lái),但是d因?yàn)橐昧似胀ㄗ兞?#xff08;a,b是普通變量,不是宏變量),所以編譯的時(shí)候沒(méi)有確定下來(lái)。但是如果把a(bǔ)和b變成宏變量(加修飾符final),d就可以確定下來(lái)了:
結(jié)果為:
抽象類和抽象方法
1.?抽象方法和抽象類都要用abstract進(jìn)行修飾。有抽象方法的類只能被定義成抽象類,但是抽象類中可以沒(méi)有抽象方法。
2.?抽象類不能被實(shí)例化,無(wú)法使用new關(guān)鍵字調(diào)用抽象類的構(gòu)造器來(lái)創(chuàng)建抽象類的實(shí)例。
3.抽象類不能用于創(chuàng)建實(shí)例,只能當(dāng)作父類被子類繼承。子類繼承的時(shí)候,父類的所有抽象方法都必須實(shí)現(xiàn)。
舉個(gè)栗子:
結(jié)果如下:
END
【2017.07】 這是補(bǔ)昨天的,學(xué)習(xí)進(jìn)度不能停,空了就得相辦法補(bǔ)回來(lái),辛苦一點(diǎn)沒(méi)關(guān)系,心里踏實(shí)。昨天帶弟弟逛了大學(xué)校園,想讓他提前感受一下大學(xué),刺激他的學(xué)習(xí)。不過(guò)并不強(qiáng)求什么,畢竟還小,我也是現(xiàn)在才知道學(xué)習(xí)的意義,才開始有了學(xué)習(xí)的激情與渴望,小刺猬,加油!
總結(jié)
以上是生活随笔為你收集整理的《疯狂Java讲义》5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《疯狂Java讲义》4
- 下一篇: 《疯狂Java讲义》7