[5]構造函數和變量
一.構造函數
* 1.什麼是構造函數
構造函數是一個特殊的函數
沒有返回值類型, 函數名和類名相同, new關鍵字創建對象時自動調用
* 2.什麼時候使用構造函數
當我們想在創建對象的時候就執行一段代碼, 就可以把這段代碼放在構造函數中
例如對成員變量的賦值, 定義構造函數, 接收參數, 在執行構造函數的時候, 就可以對成員變量賦值了
* 3.構造函數的調用
構造函數可以在new關鍵字創建對象的時候調用
構造函數還可以在其他構造函數的第一條語句中使用this()形式調用
* 4.自動生成構造函數
一個類如果沒寫任何構造函數, 那麼會自動生成一個. 這個自動生成的構造函數沒有參數, 也沒有任何代碼.
注意, 如果寫了一個有參的, 就不會自動生成無參的了.
5.構造函數的訪問權限
通常情況下都是public的, 在別的類中可以創建該類對象
某些特殊情況下我們定義了一個類, 不希望別人創建對象, 那麼就可以用private修飾構造函數.
二.局部變量和成員變量
1.局部變量:
LocalVariable, 方法中定義的變量.
2.成員變量:
Field, 類中定義的變量
3.重名問題:
局部變量可以和成員變量同名.
但是局部變量不能和局部變量同名. 成員變量不能和成員變量同名
4.訪問問題:
在方法中直接以一個變量名形式訪問的時候, 會先找局部變量, 再找成員變量.
如果存在局部變量, 直接訪問局部的, 如果沒有局部的才找成員的, 如果成員的也沒有, 纔會報錯.
使用"this.變量名"形式訪問一個變量, 可以直接找到成員變量
三.this關鍵字
1.構造函數中
可以使用"this(參數)"形式調用其它構造函數
* 2.普通函數中
this代表調用當前函數的對象
通常在set方法和構造函數中都會使用, 當局部變量和成員變量同名時訪問成員變量
四.函數的參數傳遞
1.基本數據類型
基本數據類型的數據由於是存儲在棧內存中的, 傳入函數中函數中的變量是一個新的值, 函數中改變調用處不變.
2.引用數據類型
引用數據類型的數據是存儲在堆內存中的, 變量記住的是地址, 在調用函數時函數中傳入的也是地址, 兩邊指向同一個對象, 一邊改變兩邊都變.
五.代碼塊
1.什麼是代碼塊
在類中用"{}"可以定義一個代碼塊
代碼塊在創建對象的時候執行
2.代碼塊和成員變量賦值的順序
一個類中如果定義了成員變量, 在創建對象的時候就會初始化, 這個默認的初始化是在代碼塊之前做的. 基本數據類型等於0, 引用數據類型等於null.
如果代碼中對成員變量賦了值, 也定義了代碼塊, 這兩部分的順序是按照定義的先後而決定的
如果代碼塊寫在了賦值的前面, 那麼是先初始化, 再代碼塊, 再賦值
如果代碼塊卸載了賦值的後面, 那麼是先初始化, 再賦值, 再代碼塊
六.static關鍵字
1.靜態變量
類加載後就初始化
所有對象共享
可以用"類名.變量名"訪問
七.思考題
大家可以思考一下
海灘上有一堆桃子, 有五隻猴子來分.
第一隻猴子發現了桃子, 將桃子分成了5份, 發現多了1個, 吃了. 拿走了一份.
第二隻猴子也來到海灘發現了桃子, 也是將桃子分成5份, 發現多了1個, 吃了. 又是拿走一份.
五隻猴子都是這麼做的. 問: 海灘上最初有多少個桃子?