20165218 2017-2018-1 《Java程序設計》第三周學習總結
20165218 2017-2018-1 《Java程序設計》第三周學習總結
教材學習內容總結-第四章 類與對象
面向對象語言
需要完成某種任務時,首先要想到,誰去完成任務,即哪個對象去完成任務;提到數據,首先想到這個數據是哪個對象的。————《Java 2實用教程》P51
面向對象編程的三個特性:封裝性、繼承、多態
- 封裝性: 將數據和對數據的操作封裝在一起。通過抽象,即從具體的實例中抽取出共同性質形成一般的概念。
graph LR
A[行為/功能]-->|抽象|B[方法]
graph LR
A[狀態描述]-->|抽象|B[屬性]
繼承: 子類可以繼承父類的屬性和行為
多態: 一是操作名稱的多態性,即向操作傳遞不同消息;二是繼承有關的多態,指同一個操作被不同類型對象調用時可能產生不同行為。
類
- 類=類聲明+類體
- 類體的內容:變量的聲明+方法定義
- 成員變量在整個類內都有效,其有效性與它在類體中書寫的先後位置無關。
- 方法中的局部變量只在方法內有效,且與其聲明的位置有關。
變量 | 有效範圍 |
---|---|
參數 | 整個方法 |
在一個復合語句中聲明 | 該復合語句 |
在一個循環語句中聲明 | 該循環語句 |
class A{ int a = 12; \\合法,聲明的同時賦予初值12 }
class A{
int a;
a = 12;\\非法
}
類體的內容中不能有語句,語句只能出現在方法體中
構造方法與對象的創建
構造方法
程序用類創建對象時需要的一種特殊方法,名字必須與他所在的類名字完全相同,沒有類型
System.out.println("南孚電池的儲電量是:"+nanfu.electricityAmount);
類的名字 對象名字 \\聲明對象
對象 = new 構造方法 \\為對象分配變量(使用new運算符和構造方法)
使用對象
對象.變量 對象.方法
參數傳值
可變參數
可變參數不給出參數列表中從某項開始直到最後一項\\示例 public void f(int ... x) \\示例2 public void g(double a, int ... x) \\錯誤示例,可變參數x代表的最後一個參數不是method方法的最後一個參數 public void method(int ... x, int y)
實例成員與類成員(static)
實例變量與類變量
實例變量和相應的對象關聯,類變量和類相關聯
實例方法與類方法
方法 | 實例方法 | 類方法 |
---|---|---|
分配入口地址 | 該類創建對象後 | 該類被加到內存時 |
調用 | 通過對象調用 | 通過類名和對象調用皆可 |
操作 | 可操作實例變量和類變量 | 只能操作類變量 |
this關鍵字
表示某個對象(註意與前文區分成員變量與局部變量的this區分),可以出現在實例方法和構造方法中,但不可以出現在類方法中。
this關鍵字出現在類的構造方法中時,代表使用該構造方法所創建的對象
this關鍵字出現在實例方法中時,就代表正在調用該方法的對象
訪問權限
權限 | 關鍵字 | 含義 |
---|---|---|
私有 | private |
在B類中,不能通過A類的類名來調用A中的私有類變量和私有類方法 |
共有 | public |
B類中用類A創建了一個對象後,該對象能訪問A中的共有變量和共有方法。B中也可通過A的類名調用A中的類成員變量和類方法 |
受保護的 | protected |
B類中用類A創建了一個對象後,如果B和A類在同一個包中,那麽該對象可以訪問A的protected變量和protected方法。任何一個與A類同包的類中,也可通過A的類名訪問A類的protected類變量和protected類方法
友好| 不用private
,public
,protected
修飾 | B類中用類A創建了一個對象後,如果B和A類在同一個包中,那麽該對象可以訪問A的友好變量和友好方法。任何一個與A類同包的類中,也可通過A的類名訪問A類的類友好成員變量和類友好方法
教材學習中的問題和解決過程
- 問題1:“友好變量和友好方法”與“受保護的成員變量和方法”有什麽不同?
- 問題1解決方案:成員變量分為實例變量和類變量。“友好”是“任何一個與A類同包的類中,可通過A的類名訪問A類的類友好成員變量和類友好方法”;“
protected
”則是“任何一個與A類同包的類中,可通過A的類名訪問A類的protected類變量和protected類方法”。“友好”比protected
權限更大一些。
代碼調試中的問題和解決過程
問題1:當需要同時編譯三個源文件時,比如
Example4_8.java
,Circle.java
,Circular.java
(都在Ch4/src
之下,當前位置是Ch4
,在命令行輸入javac -d bin src/Example4_8.java
,會出現如下狀況
問題1解決方案:這是因為同時需要編譯的
Circle.java
,Circular.java
不在Ch4
之下,需要進入Ch4/src
後,利用javac -d ../bin Example4_8.
編譯即可:
問題2:教材第76頁實例
問題2解決方案:雖然在類
Example4_9
沒有聲明數據類型,但在類SIM
中聲明了double
型,調用SIM
為對象simOne
分配變量時,數據類型要保持統一。在後面加大寫字母L
。問題3:因為理解不深刻,錯把代碼寫成
問題3解決方案:聲明類的格式是
類 對象名字
,而使用對象則是對象.變量/方法
,若是類變量,則可以類.類變量
,通過類名直接訪問類變量
代碼托管
參考資料
Java學習筆記(第8版)
《Java學習筆記(第8版)》學習指導
20165218 2017-2018-1 《Java程序設計》第三周學習總結