面向?qū)ο螅ㄉ希?/h1>
本章思維導(dǎo)圖
3-0面向?qū)ο螅ㄉ希?png
類和對象
定義類
[修飾符] class 類名 {
// 初始化代碼塊
// 構(gòu)造器
// 成員變量
// 方法
}
定義成員變量
3-0面向?qū)ο螅ㄉ希?png
[修飾符] class 類名 {
// 初始化代碼塊
// 構(gòu)造器
// 成員變量
// 方法
}
[修飾符] 類型 成員變量名 [= 默認值];
- 修飾符
public
protected
private
static
final
定義方法
[修飾符] 返回值類型 方法名 ( 形參列表 ) {
// 方法體
};
- 修飾符
public
protected
private
static
final
abstract
定義構(gòu)造器
[修飾符] 構(gòu)造器名 ( 形參列表 ) {
// 構(gòu)造器體
};
- 修飾符
public
protected
private
- 構(gòu)造器名:必須和類名相同
對象、引用和指針
- 引用存儲在棧內(nèi)存
- 對象存儲在堆內(nèi)存
- 垃圾回收機制
- 當(dāng)堆內(nèi)存的對象沒有任何引用變量指向時,java將自動釋放該對象的內(nèi)存
-
this
- 構(gòu)造器中引用該構(gòu)造器正在初始化的對象
- 在方法中引用調(diào)用該方法的對象
- 在方法中this作為返回值返回調(diào)用該方法的對象娄帖,可以連續(xù)調(diào)用方法
方法
- 形參參數(shù)可變的方法
-
type... variable;
- 多個參數(shù)值被當(dāng)成數(shù)組傳入
-
type[] variable;
- 參數(shù)傳入時必須是一個數(shù)組的引用類型變量
-
- 遞歸方法
- 方法重載
- 確定一個方法的三要素
- 調(diào)用者
- 方法名
- 形參列表
- 要求:同一個類中方法名相同,參數(shù)列表不同
- 確定一個方法的三要素
成員變量和局部變量
成員變量
- 實例變量(不以static修飾)
- 類變量(以static修飾)
局部變量
- 形參
- 方法局部變量
- 代碼塊局部變量
隱藏和封裝
封裝(encapsulation)
訪問控制符
-
private
當(dāng)前類訪問權(quán)限 -
default
默認:包訪問權(quán)限 -
protected
子類訪問權(quán)限 -
public
公共訪問權(quán)限- 源文件名必須和類名相同
package茫船、import、import static
- package
-
package packageName;
- 放在第一行
- 編譯扭屁、運行
javac -d . fileName.java
java pakcageName.className
- 調(diào)用構(gòu)造器時也需要加上包前綴
package.subPackage.ClassName variable = new package.subPackage.ClassName()算谈;
-
- import
- 向某個java文件導(dǎo)入指定包層次下的某個類或全部類
- 導(dǎo)入單個類:
import package.subPackage...ClassName;
- 導(dǎo)入全部類:
import package.subPackage...*;
- import static
- 導(dǎo)入指定類的單個或全部的靜態(tài)成員變量、方法
- 導(dǎo)入指定類的單個靜態(tài)成員變量料滥、方法
import static package.subPackage...ClassName.fieldName | methodName;
- 導(dǎo)入指定類的全部靜態(tài)成員變量然眼、方法
import static package.subPackage...ClassName.*;
- 導(dǎo)入指定類的單個或全部的靜態(tài)成員變量、方法
Java常用包
-
java.lang
:Java的核心類,系統(tǒng)自動導(dǎo)入 -
java.util
:大量的工具類/接口和集合框架類/接口 -
java.net
:網(wǎng)絡(luò)編程相關(guān)的類/接口 -
java.io
:輸入/輸出的相關(guān)的類/接口 -
java.text
:格式化相關(guān)的類 -
java.sql
:進行JDBC數(shù)據(jù)庫編程的相關(guān)類/接口 -
java.awt
:抽象窗口工具集的相關(guān)類/接口葵腹,主要用于構(gòu)建圖形界面(GUI)程序 -
java.swing
:swing圖形用戶界面編程的相關(guān)類/接口高每,用于構(gòu)建平臺無關(guān)的圖形界面(GUI)程序
構(gòu)造器
使用構(gòu)造器執(zhí)行初始化
構(gòu)造器是一個特殊的方法,這個方法用于創(chuàng)建實例時執(zhí)行初始化
構(gòu)造器重載
使用this在一個構(gòu)造器中調(diào)用另一個構(gòu)造器
this(形參列表);
繼承
[修飾符] class subClass extends superClass{
// 類體
}
重寫(override)父類的方法
- 規(guī)則:方法名相同践宴、形參列表相同鲸匿、子類方法返回值類型應(yīng)比父類更小或相等、子類方法聲明拋出的異常類應(yīng)比父類更小或相等阻肩、子類方法的訪問權(quán)限應(yīng)比父類方法更大或相等
- 覆蓋方法和被覆蓋方法要么都是類方法带欢,要么都是實例方法
- 調(diào)用父類被覆蓋的方法
- 實例方法:
super.被覆蓋的實例方法()
- 類方法:
父類名.被覆蓋的類方法()
- 實例方法:
調(diào)用父類構(gòu)造器
super(形參列表)
- 子類總會調(diào)用父類的構(gòu)造器
多態(tài)
引用變量兩種類型:編譯時類型、運行時類型
引用變量在編譯階段只能調(diào)用其編譯時類型的所具有的方法,但運行時則執(zhí)行它運行時類型所具有的方法
子類是特殊的父類洪囤,把一個子類對象賦值給父類的引用變量,系統(tǒng)自動完成向上轉(zhuǎn)型
強制類型轉(zhuǎn)換
- 為了程序健壯性撕氧,在強制類型轉(zhuǎn)換前先使用
instanceof
運算符判斷是否可以轉(zhuǎn)換 -
instanceof
運算符- 判斷一個對象是否為一個類的實例
繼承與組合
- 繼承
- 繼承破壞了父類的封裝性瘤缩,子類可以直接訪問父類的內(nèi)部信息,造成了子類和父類的耦合伦泥,可能會出現(xiàn)子類惡意篡改父類的方法
- 父類剥啤、子類、其他類
- 父類中那些僅為輔助其他的工具方法不脯,應(yīng)該使用private訪問控制符府怯,不讓子類訪問改方法
- 父類中的方法需要被外部類調(diào)用,必須使用public修飾防楷,但又不希望子類重寫該方法牺丙,可以使用final修飾符
- 如果希望父類的某個方法被子類重寫,但不希望被其他類自由訪問复局,使用protected來修飾
- 不要在父類構(gòu)造器中調(diào)用被子類重寫的方法
- 在父類構(gòu)造器中調(diào)用了被重寫的方法冲簿,在new子類對象的時候,會自動調(diào)用父類構(gòu)造器亿昏,在父類構(gòu)造器中調(diào)用的方法時子類的峦剔,會引發(fā)一些錯誤
- 如果僅僅需要復(fù)用一個類,可以用組合
組合
- 把舊類對象作為新類的成員變量組合進來
- 繼承表達的是一種“是(is-a)”的關(guān)系角钩,而組合表達的是“有(has-a)”的關(guān)系
初始化塊
初始化塊是類的第4種成員變量吝沫,一個類里可以有多個初始化塊,先定義的先執(zhí)行
[修飾符] {
// 初始化代碼
}
修飾符只能是static
- 初始化塊在創(chuàng)建對象時執(zhí)行递礼,然后執(zhí)行構(gòu)造器
- 編譯java類后惨险,會將初始化塊代碼還原到每個構(gòu)造器中,放在最前面
- 靜態(tài)初始化塊脊髓,使用
static
修飾的初始化塊 - 靜態(tài)初始化塊實在類初始化階段執(zhí)行平道,而不是在創(chuàng)建對象時才執(zhí)行
- 靜態(tài)成員不能訪問非靜態(tài)成員,即不能對實例變量進行初始化
執(zhí)行順序
- 類初始化階段
- 最頂層父類的靜態(tài)初始化塊->依次向下->當(dāng)前類的初始化塊
- 對象初始化階段
- 最頂層父類的初始化塊->最頂層父類的構(gòu)造器->依次向下->當(dāng)前類初始化塊供炼、當(dāng)前類構(gòu)造器