- Java開發(fā)之道
- 張振坤 李鐘尉 陳丹丹等編著
- 562字
- 2018-12-27 19:54:07
細節(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)成員變量重新分配內存了。
- Java應用與實戰(zhàn)
- JIRA 7 Administration Cookbook(Second Edition)
- 我的第一本算法書
- Python從入門到精通(精粹版)
- 深入淺出DPDK
- HTML5+CSS3+JavaScript Web開發(fā)案例教程(在線實訓版)
- Highcharts Cookbook
- Python深度學習:模型、方法與實現(xiàn)
- Java語言程序設計教程
- 從Power BI到Analysis Services:企業(yè)級數(shù)據(jù)分析實戰(zhàn)
- Unity 2017 Game AI Programming(Third Edition)
- jQuery從入門到精通(微課精編版)
- Data Manipulation with R(Second Edition)
- C語言程序設計教程
- 自己動手構建編程語言:如何設計編譯器、解釋器和DSL