面向對象的四大特征 封裝 繼承 多態 抽象
1.封裝
廣義: 類 方法 包 的定義本身就是一種封裝
狹義: 在設計一個類的時候
將所有的屬性設置為私有的
並對各個私有的屬性設計相應的 存/取方法 來完成對屬性的使用
私有化只能代表封裝的特性
可以說私有是封裝的一種 不能說封裝即是私有
封裝的好處:
隱藏實現細節 提供公共的訪問方式
提高了安全性
封裝的原則:
將不需要對外提供的內容都封裝起來
把屬性隱藏 提供公共的方法進行訪問
private關鍵字*****
關鍵字的特點:
1.私有的意思
2.是一個權限修飾符
3.可以修飾成員變量 和 成員方法
4.被其修飾的成員 只能在本類中被訪問
封裝的步驟:
1.把成員變量用private修飾
2.提供相應的 存/取方法 setXxx() 和 getXxx();
2.this關鍵字
this關鍵字指的是 當前對象的引用
作用:
this.屬性 訪問本類的成員變量
用來區分 成員變量 和 局部變量 重名的問題
this.方法 訪問本類的成員方法
this() 訪問本類的構造方法
()中可以有參數的 如果有參數 就是調用指定的有參構造
註意事項:
1.this() 不能使用在普通方法中 只能寫在構造方法中
2.必須是構造方法中的第一條語句
3.static關鍵字(靜態)
特點:
1.static靜態 可以用來修飾共有的屬性/行為
2.static與類相關 和對象無關 隨著類的加載而加載 優先於對象而存在
3.被類的所有對象共享
例如 空調 就是靜態 水杯 就是非靜態
4.被static修飾的成員 多了一種調用方式 可以通過 類名.成員名 調用
方法區:
類信息被存儲在一個稱為方法區的內存空間中
類信息就是由類加載器在類加載時從文件中提取
靜態(類)變量 也存儲在方法區中
靜態和非靜態的區別*****
1.所屬不同
靜態屬於類
非靜態屬於對象
2.內存中位置不同
靜態 存在方法區的靜態區中
非靜態 存在堆內存中
3.內存中出現的時間不同
靜態隨著類的加載而加載 隨著類的消亡而消亡
存活時間長 不建議定義過多
非靜態隨著對象的創建而存在 隨著對象的消亡而消亡
語法:
修飾成員 (成員變量 / 成員方法)
修飾成員變量的時候
[訪問權限修飾符] static 類型 屬性名;
修飾成員方法的時候
[訪問權限修飾符] static 返回值類型 方法名(參數列表){
方法體
}
靜態修飾方法
被靜態修飾的方法 為靜態方法
1.只能直接訪問 靜態成員 包括成員變量和成員方法
不能直接訪問 非靜態成員 包括成員變量和成員方法
必須創建該類對象 才能調用非靜態成員
因為靜態優先於對象存在 在靜態方法加載進內存時
非靜態的還沒進入內存中
2.在靜態方法中 沒有this/super 關鍵字
非靜態方法
可以訪問靜態成員 也可以訪問非靜態成員
總結:
靜態雖好 不能亂用
利:
將對象共享的數據 進行單獨存儲 節省內存
可以直接用類名.調用
弊:
生命周期過長
訪問出現局限性 靜態只能直接訪問靜態
靜態的內存圖
main方法梳理:
public static void main(String[] args){
}
主函數 是一個特殊的函數 可以被jvm直接調用 作為程序的入口
public 最大權限
static 靜態的 在當前方法中會創建對象 需要在創建對象之前
先將main方法加載進內存
void 不確定的返回值 jvm不需要這個返回值
main 一個通用的名稱 不是關鍵字 jvm會識別它
String[] 傳入 存儲String類型數據的數組
args 參數列表 名 整個main方法中 只有這個能隨便寫
代碼塊:
靜態代碼塊 , 局部代碼塊 , 動態代碼塊
以{}包裹起來的代碼 被稱為一個代碼塊
局部代碼塊:
聲明在方法中的代碼塊 執行時機與聲明的位置相關
靜態代碼塊:
使用static關鍵字修飾的代碼塊 在類加載時執行 並且 只執行一次
在類中 方法外定義
格式:
static{
執行內容
}
用於給類中的數據進行初始化 一般用於加載驅動 jdbc驅動
動態代碼塊:
又稱為構造代碼塊 聲明在類中的代碼塊 在創建對象是執行一次
每創建一個對象 就會執行一次動態代碼塊
在類中 方法外定義
格式:{
執行內容
}
執行順序:
靜態代碼塊>動態代碼塊>構造方法
面向對象的四大特征 封裝 繼承 多態 抽象