二、Java面向對象(6)_深入變量
2018-04-30
父母在人生尚有來處,父母去人生只剩歸途。
深入變量
一、變量的分類和初始值
1.變量的分類
變量根據定義位置不同而分成兩大類
1)成員變量/字段:直接定義在類{}中的變量(方法外)
-
-
-
- 類成員變量(使用static修飾的字段)
- 實例成員變量(沒有使用static修飾的字段)
-
-
2)局部(環境)變量:成員變量以外的變量,定義在方法中的變量
-
-
-
- 方法內部的變量
- 方法的形參
- 代碼塊中的變量,一對{}
-
-
註意:變量的訪問是就近原則
2.變量的初始化
-
- 成員變量:默認是有初始值的(看圖)
- 成員變量:默認是有初始值的(看圖)
-
- 局部變量:默認沒有初始值,所以必須先初始化才能使用
註意:變量必須初始化(賦值)之後才能使用,初始化才是真正的內存分配。
二、變量的作用域和生命周期
- 變量的作用域
變量根據所定義的位置不同也決定了其作用域也是不同的。看變量所在的那對花括號{}
成員變量/字段:在所定義的類中起作用
環境變量:從開始定義的位置開始到緊跟著結束的}之間
2.變量的生命周期
變量的作用域決定了變量的生命周期
變量的生命周期指的是一個變量被創建並被分配內存空間開始,到該變量被銷毀並清除其所在內存空間的過程。
-------------------------------------------------------------------------------------------------------------------------
成員變量: 當系統加載類或創建類的實例時,系統會自動為成員變量分配內存空間,並在分配內存空間後,自動為成員變量指定初始值。
-------------------------------------------------------------------------------------------------------------------------
三、局部變量的初始化和在JVM中的運行機制
局部變量定義後,必須經過顯示初始化才能使用。這意味著定義了局部變量後,系統並未為這個變量分配內存空間,直到等到程序為這個變量賦值初始值時,系統才會給局部變量分配內存,並將初始值保存到這塊內存中。
與成員變量不同,局部變量不屬於任何類或實例,因此它總是保存在其所在方法的棧內存中。如果局部變量是基本類型變量,則直接把變量值存放在棧中,如果是引用類型,則存放地址在棧中。
棧內存中的變量無須系統垃圾回收,變量是隨方法或代碼塊的運行結束而結束的。因此,局部變量的作用域是從初始化該變量開始,知道該方法或該代碼塊運行完成而結束。因為局部變量只保存基本類型的值或對象的引用,因此局部變量所占的內存通常較小。
四、變量的定義和選擇
1.考慮變量的生存時間,影響系統(內存)開銷
2.擴大了作用域,不利於程序的內聚性。
開發中應盡量縮小變量的作用域,這樣在內存中停留時間越短,性能也就越高。
盡量不使用static修飾,一般定義工具方法時或者static方法需要訪問的變量,該變量屬於類的時候,需要使用static修飾
也不要動不動就使用成員變量,因為存在著線程不安全的問題。
二、Java面向對象(6)_深入變量