構造函數和變量

                            [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個, 吃了. 又是拿走一份.

  • 五隻猴子都是這麼做的. 問: 海灘上最初有多少個桃子? 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章