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