1. 程式人生 > >二、Java面向對象(6)_深入變量

二、Java面向對象(6)_深入變量

span 類成員變量 不同 環境變量 基本類型 環境 變量定義 mil 存在

2018-04-30

父母在人生尚有來處,父母去人生只剩歸途。

深入變量

一、變量的分類和初始值

  1.變量的分類

    變量根據定義位置不同而分成兩大類

      1)成員變量/字段:直接定義在類{}中的變量(方法外)

        • 類成員變量(使用static修飾的字段)
        • 實例成員變量(沒有使用static修飾的字段)

     2)局部(環境)變量:成員變量以外的變量,定義在方法中的變量

        • 方法內部的變量
        • 方法的形參
        • 代碼塊中的變量,一對{}              

  註意:變量的訪問是就近原則

技術分享圖片

  2.變量的初始化

    • 成員變量:默認是有初始值的(看圖)

        技術分享圖片

    • 局部變量:默認沒有初始值,所以必須先初始化才能使用

  註意:變量必須初始化(賦值)之後才能使用,初始化才是真正的內存分配。

二、變量的作用域和生命周期

  1. 變量的作用域   

    變量根據所定義的位置不同也決定了其作用域也是不同的。看變量所在的那對花括號{}

      成員變量/字段:在所定義的類中起作用

      環境變量:從開始定義的位置開始到緊跟著結束的}之間

  2.變量的生命周期

    變量的作用域決定了變量的生命周期

    變量的生命周期指的是一個變量被創建並被分配內存空間開始,到該變量被銷毀並清除其所在內存空間的過程。

    -------------------------------------------------------------------------------------------------------------------------   

    成員變量: 當系統加載類或創建類的實例時,系統會自動為成員變量分配內存空間,並在分配內存空間後,自動為成員變量指定初始值。

    -------------------------------------------------------------------------------------------------------------------------

    技術分享圖片

三、局部變量的初始化和在JVM中的運行機制

  局部變量定義後,必須經過顯示初始化才能使用。這意味著定義了局部變量後,系統並未為這個變量分配內存空間,直到等到程序為這個變量賦值初始值時,系統才會給局部變量分配內存,並將初始值保存到這塊內存中。

與成員變量不同,局部變量不屬於任何類或實例,因此它總是保存在其所在方法的棧內存中。如果局部變量是基本類型變量,則直接把變量值存放在棧中,如果是引用類型,則存放地址在棧中。

  棧內存中的變量無須系統垃圾回收,變量是隨方法或代碼塊的運行結束而結束的。因此,局部變量的作用域是從初始化該變量開始,知道該方法或該代碼塊運行完成而結束。因為局部變量只保存基本類型的值或對象的引用,因此局部變量所占的內存通常較小。

四、變量的定義和選擇

  1.考慮變量的生存時間,影響系統(內存)開銷

  2.擴大了作用域,不利於程序的內聚性。

開發中應盡量縮小變量的作用域,這樣在內存中停留時間越短,性能也就越高。

盡量不使用static修飾,一般定義工具方法時或者static方法需要訪問的變量,該變量屬於類的時候,需要使用static修飾

也不要動不動就使用成員變量,因為存在著線程不安全的問題。

二、Java面向對象(6)_深入變量