steinqiao |
|
|||
日歷
統(tǒng)計(jì)
導(dǎo)航常用鏈接留言簿隨筆檔案搜索最新評(píng)論
閱讀排行榜評(píng)論排行榜 |
JAVA SE Lesson 1
1. 類是一種抽象的概念,對象是類的一種具體表示形式,是具
體的概念。先有類,然后由類來生成對象(Object)。對象又
叫做實(shí)例(Instance)。
2. 類由兩大部分構(gòu)成:屬性以及方法。屬性一般用名詞來表示,
方法一般用動(dòng)詞來表示。
3. 如果一個(gè) java 源文件中定義了多個(gè)類,那么這些類中最多只
能有一個(gè)類是 public 的,換句話說,定義的多個(gè)類可以都不
是 public 的。
4. 在 Java 中進(jìn)行方法的參數(shù)傳遞時(shí),無論傳遞的是原生數(shù)據(jù)類
型還是引用類型,參數(shù)傳遞方式統(tǒng)一是傳值(pass by value)。
Java 中沒有傳引用(pass by reference)的概念。
5. 方法重載(Overload)。表示兩個(gè)或多個(gè)方法名字相同,但方
法參數(shù)不同。方法參數(shù)不同有兩層含義:1)參數(shù)個(gè)數(shù)不同。
2)參數(shù)類型不同。 注意:方法的返回值對重載沒有任何影
響。
6. 構(gòu)造方法重載:只需看參數(shù)即可。如果想在一個(gè)構(gòu)造方法中
調(diào)用另外一個(gè)構(gòu)造方法,那么可以使用 this()的方式調(diào)用,this()
括號(hào)中的參數(shù)表示目標(biāo)構(gòu)造方法的參數(shù)。this()必須要作為構(gòu)
造方法的第一條語句,換句話說,this()之前不能有任何可執(zhí)
行的代碼。
7. 繼承(Inheritence):Java 是單繼承的,意味著一個(gè)類只能從
另一個(gè)類繼承(被繼承的類叫做父類【基類,base class】, 繼
承的類叫做子類),Java 中的繼承使用 extends 關(guān)鍵字。
8. 當(dāng)生成子類對象時(shí),Java 默認(rèn)首先調(diào)用父類的不帶參數(shù)的構(gòu)造
方法,然后執(zhí)行該構(gòu)造方法,生成父類的對象。接下來,再
去調(diào)用子類的構(gòu)造方法,生成子類的對象。【要想生成子類的
對象,首先需要生成父類的對象,沒有父類對象就沒有子類
對象。比如說:沒有父親,就沒有孩子】。
9. super 關(guān)鍵字:super 表示對父類對象的引用。
10. 如果子類使用 super()顯式調(diào)用父類的某個(gè)構(gòu)造方法,那么在
執(zhí)行的時(shí)候就會(huì)尋找與 super()所對應(yīng)的構(gòu)造方法而不會(huì)再去
尋找父類的不帶參數(shù)的構(gòu)造方法。與 this 一樣,super 也必須
要作為構(gòu)造方法的第一條執(zhí)行語句,前面不能有其他可執(zhí)行
語句。
11. 關(guān)于繼承的 3 點(diǎn):
a) 父類有的,子類也有
b) 父類沒有的,子類可以增加
c) 父類有的,子類可以改變
12. 關(guān)于繼承的注意事項(xiàng)
a) 構(gòu)造方法不能被繼承
b) 方法和屬性可以被繼承
c) 子類的構(gòu)造方法隱式地調(diào)用父類的不帶參數(shù)的構(gòu)造方法
d) 當(dāng)父類沒有不帶參數(shù)的構(gòu)造方法時(shí),子類需要使用 super 來顯
式地調(diào)用父類的構(gòu)造方法,super 指的是對父類的引用
e) super 關(guān)鍵字必須是構(gòu)造方法中的第一行語句。
13. 方法重寫(Override):又叫做覆寫,子類與父類的方法返回
類型一樣、方法名稱一樣,參數(shù)一樣,這樣我們說子類與父
類的方法構(gòu)成了重寫關(guān)系。
14. 方法重寫與方法重載之間的關(guān)系:重載發(fā)生在同一個(gè)類內(nèi)部
的兩個(gè)或多個(gè)方法。重寫發(fā)生在父類與子類之間。
15. 當(dāng) 兩 個(gè) 方 法 形 成 重 寫 關(guān) 系 時(shí) , 可 以 在 子 類 方 法 中 通 過
super.run()形式調(diào)用父類的 run()方法,其中 super.run()不必放
在第一行語句,因此此時(shí)父類對象已經(jīng)構(gòu)造完畢,先調(diào)用父
類的 run()方法還是先調(diào)用子類的 run()方法是根據(jù)程序的邏輯
決定的。
16. 在定義一個(gè)類的時(shí)候,如果沒有顯式指定該類的父類,那么
該類就會(huì)繼承于 java.lang.Object 類(JDK 提供的一個(gè)類,Object
類是 Java 中所有類的直接或間接父類)。
17. 多態(tài)(Polymorphism):我們說子類就是父類(玫瑰是花,男
人是人),因此多態(tài)的意思就是:父類型的引用可以指向子類
的對象。
Java SE Lesson 2
1. 多態(tài):父類型的引用可以指向子類型的對象。 2. Parent p = new Child();當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類中是否有 sing()方法,如果沒有則編譯錯(cuò)誤;如果有,再去調(diào)用子類的 sing()方法。 3. 一共有兩種類型的強(qiáng)制類型轉(zhuǎn)換: a) 向上類型轉(zhuǎn)換(upcast):比如說將 Cat 類型轉(zhuǎn)換為 Animal 類型,即將子類型 轉(zhuǎn)換為父類型。對于向上類型轉(zhuǎn)換,不需要顯式指定。 b) 向下類型轉(zhuǎn)換(downcast):比如將 Animal 類型轉(zhuǎn)換為 Cat 類型。即將父類型 轉(zhuǎn)換為子類型。對于向下類型轉(zhuǎn)換,必須要顯式指定(必須要使用強(qiáng)制類型 轉(zhuǎn)換)。 4. 抽象類(abstract class):使用了 abstract 關(guān)鍵字所修飾的 類叫做抽象類。抽 象類無法實(shí)例化,也就是說,不能 new 出來一個(gè)抽象類的對象(實(shí)例)。 5. 抽象方法(abstract method):使用 abstract 關(guān)鍵字所修飾的方法叫做抽象方 法。抽象方法需要定義在抽象類中。相對于抽象方法,之前所定義的方法叫 做具體方法(有聲明,有實(shí)現(xiàn))。 6. 如果一個(gè)類包含了抽象方法,那么這個(gè)類一定是抽象類。 7. 如果某個(gè)類是抽象類,那么該類可以包含具體方法(有聲明、有實(shí)現(xiàn))。 8. 如果一個(gè)類中包含了抽象方法,那么這個(gè)類一定要聲明成 abstract class,也 就是說,該類一定是抽象類;反之,如果某個(gè)類是抽象類,那么該類既可以 包含抽象方法,也可以包含具體方法。 9. 無論何種情況,只要一個(gè)類是抽象類,那么這個(gè)類就無法實(shí)例化。 10. 在子類繼承父類(父類是個(gè)抽象類)的情況下,那么該子類必須要實(shí)現(xiàn)父類 中所定義的所有抽象方法;否則,該子類需要聲明成一個(gè) abstract class。 11. 接口(interface):接口的地位等同于 class,接口中的所有方法都是抽象方 法。在聲明接口中的方法時(shí),可以使用 abstract 關(guān)鍵字,也可以不使用。通 常情況下,都會(huì)省略掉 abstract 關(guān)鍵字。 12. 可以將接口看作是特殊的抽象類(抽象類中可以有具體方法,也可以有抽象 方法,而接口中只能有抽象方法,不能有具體方法)。 13. 類可以實(shí)現(xiàn)接口。實(shí)現(xiàn)使用關(guān)鍵字 implements 表示,代表了某個(gè)類實(shí)現(xiàn)了 某個(gè)接口。 14. 一個(gè)類實(shí)現(xiàn)了某個(gè)接口,那么該類必須要實(shí)現(xiàn)接口中聲明的所有方法。如果 該類是個(gè)抽象類,那么就無需實(shí)現(xiàn)接口中的方法了。 15. Java 是單繼承的,也就是說某個(gè)類只能有唯一一個(gè)父類;一個(gè)類可以實(shí)現(xiàn)多 個(gè)接口,多個(gè)接口之間使用逗號(hào)分隔。 16. 多態(tài):所謂多態(tài),就是父類型的引用可以指向子類型的對象,或者接口類型 的引用可以指向?qū)崿F(xiàn)該接口的類的實(shí)例。關(guān)于接口與實(shí)現(xiàn)接口的類之間的強(qiáng) 制類型轉(zhuǎn)換方式與父類和子類之間的強(qiáng)制類型轉(zhuǎn)換方式完全一樣。 17. static 關(guān)鍵字:可以用于修飾屬性,也可以用于修飾方法,還可以用于修飾 類(后面的課程講) 18. static 修飾屬性:無論一個(gè)類生成了多少個(gè)對象,所有這些對象共同使用唯 一一份靜態(tài)的成員變量;一個(gè)對象對該靜態(tài)成員變量進(jìn)行了修改,其他對象 的該靜態(tài)成員變量的值也會(huì)隨之發(fā)生變化。如果一個(gè)成員變量是 static 的,
那么我們可以通過類名.成員變量名的方式來使用它(推薦使用這種方式)。 19. static 修飾方法:static 修飾的方法叫做靜態(tài)方法。對于靜態(tài)方法來說,可以 使用類名.方法名的方式來訪問。 20. 靜態(tài)方法只能繼承,不能重寫(Override)。 21. final 關(guān)鍵字:final 可以修飾屬性、方法、類。 22. final 修飾類:當(dāng)一個(gè)類被 final 所修飾時(shí),表示該類是一個(gè)終態(tài)類,即不能被 繼承。 23. final 修飾方法:當(dāng)一個(gè)方法被 final 所修飾時(shí),表示該方法是一個(gè)終態(tài)方法, 即不能被重寫(Override)。 24. final 修飾屬性:當(dāng)一個(gè)屬性被 final 所修飾時(shí),表示該屬性不能被改寫。 25. 當(dāng) final 修飾一個(gè)原生數(shù)據(jù)類型時(shí),表示該原生數(shù)據(jù)類型的值不能發(fā)生變化 (比如說不能從 10 變?yōu)?/span> 20);如果 final 修飾一個(gè)引用類型時(shí),表示該引用 類型不能再指向其他對象了,但該引用所指向的對象的內(nèi)容是可以發(fā)生變化 的。 26. 對于 final 類型成員變量,一般來說有兩種賦初值方式: a) 在聲明 final 類型的成員變量時(shí)就賦上初值 b) 在聲明 final 類型的成員變量時(shí)不賦初值,但在類的所有構(gòu)造方法中都為其賦 上初值。 27. static 代碼塊:靜態(tài)代碼塊。靜態(tài)代碼塊的作用也是完成一些初始化工作。首 先執(zhí)行靜態(tài)代碼塊,然后執(zhí)行構(gòu)造方法。靜態(tài)代碼塊在類被加載的時(shí)候執(zhí)行, 而構(gòu)造方法是在生成對象的時(shí)候執(zhí)行;要想調(diào)用某個(gè)類來生成對象,首先需 要將類加載到 Java 虛擬機(jī)上(JVM),然后由 JVM 加載這個(gè)類來生成對象。 28. 類的靜態(tài)代碼塊只會(huì)執(zhí)行一次,是在類被加載的時(shí)候執(zhí)行的,因?yàn)槊總€(gè)類只 會(huì)被加載一次,所以靜態(tài)代碼塊也只會(huì)被執(zhí)行一次;而構(gòu)造方法則不然,每 次生成一個(gè)對象的時(shí)候都會(huì)調(diào)用類的構(gòu)造方法,所以 new 一次就會(huì)調(diào)用構(gòu)造 方法一次。 29. 如果繼承體系中既有構(gòu)造方法,又有靜態(tài)代碼塊,那么首先執(zhí)行最頂層的類 的靜態(tài)代碼塊,一直執(zhí)行到最底層類的靜態(tài)代碼塊,然后再去執(zhí)行最頂層類 的構(gòu)造方法,一直執(zhí)行到最底層類的構(gòu)造方法。注意:靜態(tài)代碼塊只會(huì)執(zhí)行 一次。 30. 不能在靜態(tài)方法中訪問非靜態(tài)成員變量;可以在靜態(tài)方法中訪問靜態(tài)的成員 變量。可以在非靜態(tài)方法中訪問靜態(tài)的成員變量。 31. 總結(jié):靜態(tài)的只能訪問靜態(tài)的;非靜態(tài)的可以訪問一切。 32. 不能在靜態(tài)方法中使用 this 關(guān)鍵字。
評(píng)論:
|
![]() |
|
Copyright © 斯坦 | Powered by: 博客園 模板提供:滬江博客 |