官术网_书友最值得收藏!

細節(jié)17 有始有終——內存中成員變量的運行機制

在類加載或使用類創(chuàng)建對象時,系統(tǒng)會自動為成員變量分配內存空間,然后自動為成員變量指定初始值,如果成員變量無初始值,則使用默認的初始值。

示例:

    public class Book {
      private String bookName;
      private static String author;
    }

本示例創(chuàng)建了類Book,該類有兩個成員變量,其中,bookName 是普通的成員變量,author是靜態(tài)成員變量。

下面的代碼在TestBook類的主方法中加載Book類并創(chuàng)建該類的實例。

    public class TestBook {
      public static void main (String[] args) {
          Book book = new Book ();
      }
    }

說明

當程序執(zhí)行到語句Book book = new Book ();時,如果程序是第一次使用Book類,則系統(tǒng)首先加載Book類,并初始化類成員,其內存分布如圖5.13所示,從圖中可以看出,類加載時棧內存中并沒有Book類的引用,但是在堆內存中隱式地創(chuàng)建了Book的類對象,并為類的靜態(tài)成員author進行了初始化,這里使用默認值null初始化了Book類的類成員author,但是在加載Book類時,并沒有對普通成員變量bookName進行初始化。

圖5.13 加載Book類后的內存分布

當程序加載Book類后,執(zhí)行代碼Book book = new Book ();創(chuàng)建Book類的引用book,此時內存分布如圖5.14所示。

圖5.14 創(chuàng)建Book類的實例book后的內存分布

說明

從圖5.14可以看出,當創(chuàng)建了Book類的實例后,系統(tǒng)才為普通成員變量分配內存和指定初始值,這是因為類的普通成員變量是屬于類的實例的,而不是屬于類對象,但是類的靜態(tài)成員變量是在加載類時就為其分配了內存并指定了初始值的,所以當創(chuàng)建類的實例后,就不會再為類的靜態(tài)成員變量重新分配內存了。

主站蜘蛛池模板: 贵南县| 轮台县| 阳高县| 宝应县| 中方县| 腾冲县| 葫芦岛市| 雅安市| 房产| 兰考县| 图木舒克市| 海阳市| 红原县| 鹤山市| 台前县| 舒兰市| 调兵山市| 丹阳市| 平谷区| 宜兰县| 定结县| 鲁山县| 涟水县| 略阳县| 手机| 江安县| 略阳县| 蓝山县| 灵丘县| 永登县| 望奎县| 迭部县| 镇江市| 南木林县| 巫溪县| 沈丘县| 仙桃市| 江城| 新蔡县| 潼关县| 葵青区|