java第六天---面向物件、成員變數、成員方法、封裝
1 面向物件的特徵
封裝、繼承、多型
2 類與物件
類:是一組相關的屬性和行為的集合 物件:是該類事物的具體體現
成員變數 和以前定義變數是一樣的,只不過位置發生了改變。在類中,方法外。
成員方法 和以前定義方法是一樣的,只不過把static去掉
3 檔名問題
在一個java檔案中寫兩個類:一個基本的類,一個測試類。
建議:檔名稱和測試類名稱一致。
4 一個物件、二個物件、三個物件的記憶體圖
一個物件
二個物件
三個物件
5 成員變數與區域性變數的區別
A:在類中的位置不同
成員變數:在類中方法外
區域性變數:在方法定義中或者方法宣告上
B:在記憶體中的位置不同
成員變數:在堆記憶體
區域性變數:在棧記憶體
C:生命週期不同
成員變數:隨著物件的建立而存在,隨著物件的消失而消失
區域性變數:隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失
D:初始化值不同
成員變數:有預設初始化值
區域性變數:沒有預設初始化值,必須定義,賦值,然後才能使用。
注意事項:: 區域性變數名稱可以和成員變數名稱一樣,在方法中使用的時候,採用的是就近原則。如下圖:
6 引數傳遞問題
形式引數
基本型別:形式引數的改變不影響實際引數(可以理解成區域性變數的改變不影響全域性變數)
引用型別:形式引數的改變直接影響實際引數
方法的引數是類名
如果你看到了一個方法的形式引數是一個類型別(引用型別),這裡其實需要的是該類的物件。
7 匿名物件
應用場景
呼叫方法,僅僅只呼叫一次的時候。
匿名物件可以作為實際引數傳遞
8 this關鍵字
為什麼要有this:
當我們的區域性變數和成員變數相同的時候,如果我們不使用this關鍵字,那麼會導致一個問題:
就是區域性變數隱藏了成員變數的問題。
9 記憶體分配及棧和堆的區別:
棧: 存放的是區域性變數
區域性變數:在方法定義中或者方法宣告上的變數都是區域性變數。
堆: 存放的是所有new出來的東西
1: 每一個new出來的東西都會為其分配一個地制值。
2: 每一個變數都有一個預設的值
byte,short,int,long -- 0
float,double -- 0.0
char -- '\u0000'
boolean -- false
引用資料型別 -- null
3: 使用完畢就變成了垃圾,等待垃圾回收器對其回收