《Java程式設計》第5周學習總結
201711671201《Java程式設計》第5周學習總結
教材學習內容總結
第4章:類與物件
4.1 程式語言的幾個發展階段
4.1.1 面向機器語言。 4.1.2 面向過程語言。
4.1.3 面嚮物件語言
3個特性:封裝性,繼承,多型。
4.2 類
類的定義包括兩部分:類宣告和類體。基本格式為:
class 類名{
類體的內容
}
4.2.1 類宣告
類的名字要符合識別符號規定(這是語法所要求的)。
類命名遵守下列程式設計風格:(1)如果類名使用拉丁字母,那麼名字的首字母使用大寫字母,如Hello、Time等。
(2)類名最好容易識別、見名知意。當類名由幾個“單詞”複合而成時,每個單詞的首字母應大寫,如ChinaMade、AmericanVehicle、WaterLake等(駝峰習慣
4.2.2 類體
類宣告之後的一對大括號“{” “}”以及它們之間的內容稱作類體,大括號之間的內容稱作類體的內容。
類體的內容由如下所述的兩部分構成:
(1)變數的宣告:用來儲存屬性的值(體現物件的屬性)。
(2)方法的定義:方法可以對類中宣告的變數進行操作,即給出演算法(體現物件所具有的行為)。
4.2.3 成員變數
宣告變數部分所宣告的變數被稱為成員變數或域變數。
1、成員變數的型別:成員變數的型別可以是Java中的任何一種資料型別,包括基本型別:整型、浮點型、字元型、邏輯型別;引用型別:陣列、物件和介面。
2、成員變數的有效範圍:在整個類內都有效
3、程式設計風格:(1)一行只宣告一個變數。(2)變數的名字除了符合識別符號規定外,名字的首單詞的首字母使用小寫,如果變數的名字由多個單片語成,從第2個單詞開始的其他單詞的首字母使用大寫(駝峰習慣)。(3)變數名字見名知意。
4.2.4 方法
方法的定義包括兩部分:方法頭和方法體。一般格式為:
方法頭{
方法體的內容
}
1、方法頭:由方法的型別、名稱和名稱之後的一對小括號以及其中的引數列表所構成。(void:該方法不需要返回資料。)
2、方法體:方法宣告之後的一對大括號{、}以及它們之間的內容稱為方法的方法體。方法體的內容包括區域性變數的宣告和Java語句,即在方法體內可以對成員變數和方法體中宣告的區域性變數進行操作。
在方法體中宣告的變數和方法的引數被稱作區域性變數,和類的成員變數不同的是,區域性變數只在方法內有效,而且與其宣告的位置有關。方法的引數在整個方法內有效,方法內的區域性變數從宣告它的位置之後開始有效。
3、區分成員變數和區域性變數:如果區域性變數的名字與成員變數的名字相同,那麼成員變數被隱藏,即該成員變數在這個方法內暫時失效。(如果想在該方法中使用被隱藏的成員變數,必須使用關鍵字this。)
4、區域性變數沒有預設值:成員變數有預設值,但區域性變數沒有預設值,因此在使用區域性變數之前,必須保證區域性變數有具體的值。
4.2.5 需要注意的問題:對成員變數的操作只能放在方法中,方法使用各種語句對成員變數和方法體中宣告的區域性變數進行操作,宣告成員變數時可賦予初值。
4.2.6 類的UML圖
UML圖屬於結構圖,常被用於描述一個系統的靜態結構。
4.3 構造方法與物件的建立
在面嚮物件語言中,用類宣告的變數被稱為物件。
類是建立物件的模板,沒有類就沒有物件。
4.3.1 構造方法
當程式用類建立物件時需使用它的構造方法。
類中的構造方法的名字必須與它所在的類的名字完全相同,而且沒有型別。
允許在一個類中編寫若干個構造方法,但必須保證它們的引數不同,引數不同是指:引數的個數不同,或引數個數相同,但引數列表中對應的某個引數的型別不同。
注意:如果類中沒有編寫構造方法,系統會預設該類只有一個構造方法,該預設的構造方法是無引數的,且方法體中沒有語句。
1、預設構造方法與自定義構造方法:如果類裡定義了一個或多個構造方法,那麼Java不提供預設的構造方法。
2、構造方法沒有型別。
4.3.2 建立物件(2個步驟)
1、物件的宣告:一般格式為:
類的名字 物件名字;
2、為宣告的物件分配變數:使用new運算子和類的構造方法為宣告的物件分配變數,即建立物件。
4.3.3 使用物件
1、物件操作自己的變數(體現物件的屬性)
物件通過使用點運算子“.”(點運算子也稱引用運算子或訪問運算子)訪問自己的變數,訪問格式為:
物件.變數;
2、物件呼叫類中的方法(體現物件的行為)
物件可以使用點運算子“.”呼叫建立它的類中的方法,從而產生一定的行為(功能),呼叫格式為:
物件.方法;
3、體現封裝
當物件呼叫方法時,方法中出現的成員變數就是指分配給該物件的變數。
4.3.4 物件的引用和實體
1、避免使用空物件:不能讓一個空物件去呼叫方法產生行為。
2、重要結論:一個類宣告的兩個物件如果具有相同的引用,二者就具有完全相同的變數(實體)。
3、垃圾收集:Java有所謂的“垃圾收集”機制,這種機制週期地檢測某個實體是否已不再被任何物件所擁有(引用),如果發現這樣的實體,就釋放實體佔有的記憶體。
和C++不同,Java執行環境有“垃圾收集”機制,因此Java很少出現“記憶體洩露”,即由於程式忘記釋放記憶體所導致的記憶體溢位。
注:如果希望Java虛擬機器立刻進行“垃圾收集”操作,可以讓System類呼叫gc()方法。
4.4 一個Java應用程式(也稱為一個工程)由若干個類所構成,這些類可以在一個原始檔中,也可以分佈在若干個原始檔中。
4.5 引數傳值
方法中最重要的部分之一就是方法的引數,引數屬於區域性變數,當物件呼叫方法時,引數被分配記憶體空間,並要求呼叫者向引數傳遞值,即方法被呼叫時,引數變數必須有具體的值。
4.5.1 傳值機制
在Java中,方法的所有引數都是“傳值”的,也就是說,方法中引數變數的值是呼叫者指定的值的拷貝。
4.5.2 基本資料型別引數的傳值
對於基本資料型別的引數,向該引數傳遞的值的級別不可以高於該引數的級別。
4.5.3 引用型別引數的傳值
當引數是引用型別時,“傳值”傳遞的是變數中存放的“引用”,而不是變數所引用的實體。
4.5.4 可變引數
可變引數是指在宣告方法時不給出引數列表中從某項開始直至最後一項引數的名字和個數,但這些引數的型別必須相同。可變引數使用“…”表示若干個引數,這些引數的型別必須相同。例如:
public void f(int …x)
稱x是方法f的引數列表中的可變引數的“引數代表”。“引數列表”必須是引數列表中的最後一個。
對於可變引數,Java也提供了增強的for語句,允許按如下方式使用for語句遍歷引數代表所代表的引數:
for(宣告迴圈變數:引數代表) {
…
}
上述for語句的作用就是:對於迴圈變數,依次取引數代表所代表的每一個引數的值。
4.6 物件的組合
4.6.1 組合與複用
如果一個物件a組合了物件b,那麼物件a就可以委託物件b呼叫其方法,即物件a以組合的方式複用物件b的方法。
4.6.2 類的關聯關係和依賴關係的UML圖
1、關聯關係:實線。 2、依賴關係:虛線。
4.7 例項成員與類成員
4.7.1 例項變數和類變數的宣告
在宣告成員變數時,用關鍵字static給予修飾的稱作類變數,否則稱作例項變數(類變數也稱為static變數、靜態變數),例如:
class Dog {
float x; //例項變數
static int y; //類變數
}
注意:static需放在變數的型別的前面。
4.7.2 例項變數和類變數的區別
1、不同物件的例項變數互不相同。2、所有物件共享類變數。3、通過類名直接訪問類變數。
類變數是和該類建立的所有物件相關聯的變數,類變數不僅可以通過某個物件訪問,也可以直接通過類名訪問。
例項變數僅僅是和相對應的物件關聯的變數,物件的例項變數可以通過該物件訪問,但不能使用類名訪問。
4.7.3 例項方法和類方法的定義
方法宣告時,方法型別前面不加關鍵字static修飾的是例項方法,加static關鍵字修飾的是類方法(靜態方法)。例如:
class A {
int a;
float max(float x,float y) { //例項方法
…
}
static float jerry() { //類方法
…
}
static void speak(String s) { //類方法
…
}
}
注意:static需放在方法的型別的前面。
4.7.4 例項方法和類方法的區別
1、物件呼叫例項方法。2、類名呼叫類方法。
3、設計類方法的原則:對於static方法,不必建立物件就可以用類名直接呼叫它(建立物件會導致類中的例項變數被分配記憶體空間)。如果一個方法不需要操作類中的任何例項變數,就可以滿足程式的需要,考慮將這樣的方法設計為一個static方法。
4.8 方法過載
Java中存在兩種多型:過載和重寫,重寫是與繼承有關的多型。
物件的行為通過類中的方法來實現,那麼行為的多型性就是方法的過載。
4.8.1 方法過載的語法規則
方法過載的意思是:一個類中可以有多個方法具有相同的名字,但這些方法的引數必須不同。兩個方法的引數不同是指滿足下列之一:(1)引數的個數不同。(2)引數個數相同,但引數列表中對應的某個引數的型別不同。
4.8.2 避免重載出現歧義
4.9 this關鍵字
4.9.1 在構造方法中使用this
當this關鍵字出現在類的構造方法中時,代表使用該構造方法所建立的物件。
4.9.2 在例項方法中使用this
當this關鍵字出現在例項方法中時,this就代表正在呼叫該方法的當前物件。
當例項成員變數在例項方法中出現時,預設格式是:
this.成員變數;
當static成員變數在例項方法中出現時,預設格式是:
類名.成員變數;
對於例項方法呼叫的預設格式是:
this.方法;
對於類方法呼叫的預設格式是:
類名.方法;
注:this不能出現在類方法中,這是因為類方法可以通過類名直接呼叫,這時,可能還沒有任何物件誕生。
4.10 包
包名的目的是有效地區分名字相同的類。
4.10.1 包語句
package語句的一般格式為:
package 包名;
4.11 import語句:(1)引入類庫中的類。(2)引入自定義包中的類。
4.12 訪問許可權
訪問限制修飾符有private、protected和public,它們都是Java的關鍵字,用來修飾成員變數或方法。
注:①不能用protected和private修飾類。
②訪問限制修飾符按訪問許可權從高到低的排列順序是public、protected、友好的、private。
4.13 基本型別的類封裝(P95)
4.14 物件陣列
即陣列的元素是物件,例如:
Student [] stu;
stu=new Student[10];
注意,上述程式碼僅僅定義了陣列stu有10個元素,並且每個元素都是一個Student型別的物件,但這些物件目前都是空物件,因此在使用陣列stu中的物件之前,應當建立陣列所包含的物件,例如:
stu[0]=new Student();
4.15 JRE擴充套件與jar檔案(P97)
4.16 文件生成器(P98)
4.17 應用舉例
4.18 小結
面向物件程式設計的核心思想之一:將資料和對資料的操作封裝在類中,即通過抽象從具體的例項中抽取出共同的性質形成類的概念,再由類建立具體的物件,然後物件呼叫方法產生行為以達到程式所要實現的目的。
教材學習中的問題和解決過程
暫無。
程式碼除錯中的問題和解決過程
有包語句的要先建包。
感悟
上機多敲程式碼獲益良多。
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
目標 | 5000行 | 30篇 | 400小時 | |
第五週 | 500/770 | 2/5 | 14/18 |