Java學習筆記(成員變數初始化補充)

來源:互聯網
上載者:User

為了進一步理解類的初始化過程,這裡有必要進一步區分一下類的執行個體化(類執行個體)和類的對象執行個體化(對象執行個體),我們通常所說的執行個體化都是指對象執行個體化。

我們可以把類的使用簡單分為三個過程:類載入,類執行個體化,對象執行個體化。
類的載入:由Java虛擬機器根據需求將要用的類載入到記憶體中,讓類的代碼處於可用狀態;對於解釋型虛擬機器來說,這個代碼就直接可解釋執行,而對於採用即時編譯(JIT)技術來說,虛擬機器一般會在方法第1次調用時將位元組碼編譯成目標機器語言,而且是要多少編譯多少。類的載入在一個程式運行期間一般只執行一次。
類執行個體化:其實執行個體化主要是為成員變數分配空間,代碼本身當然無所謂執行個體化,都是公用的。類之所以要執行個體化主要是因為類可以擁有靜態變數的緣故,必須為類的這些靜態成員分配空間,並執行這些靜態成員變數的初始化操作;類的執行個體化在一個程式運行期間,也只執行一次;另外需要注意的是類的載入可以從本地執行,也可以從遠程擷取,因為類的代碼本質上來說也是一些資料(字元序列)。
對象執行個體化:類是一些具有共同特徵和行為的對象的靜態描述(一種資料類型),對象執行個體化就是將類作為模子為每個對象分配具體的記憶體空間形成獨立的實體;當然,這裡的分配空間主要是針對成員變數,成員方法都是些代碼,是所有對象共有的,因此並不需要重新分配空間來儲存一份代碼的複製品。
上面的上個過程,後面的過程執行都需要前面的過程已經執行過。
對於類A來說,如果類A沒有被載入,那麼A.class的調用會導致類的載入,但不會導致類執行個體化。而Class.forName("A")的調用,不僅會執行類載入,還會執行類執行個體化。其實這個方法還有一個重載方法,可以指明是否進行類執行個體化,而且還可以指定是本地載入還是遠程載入(利用ClassLoader)。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.