Java之new一個(gè)對(duì)象簡(jiǎn)單過程

1 問題

new一個(gè)對(duì)象簡(jiǎn)單過程

 
2 過程
1)類加載過程(第一次使用該類)

      先看這個(gè)類有沒有加載到內(nèi)存,沒有的話下面操作

      (1)、加載:類加載器(雙親委派模式)通過全限名讀取類的二進(jìn)制流到j(luò)vm內(nèi)部,存儲(chǔ)在運(yùn)行時(shí)內(nèi)存的方法中,java堆中生成一個(gè)代表該類的java.lang.Class對(duì)象,作為方法區(qū)數(shù)據(jù)的訪問入口

      (2)、驗(yàn)證:比如final類不能被繼承,final方法不被重寫

      (3)、準(zhǔn)備:為靜態(tài)變量分配內(nèi)存,設(shè)置初始值等

      (4)、解析:將常量池中符號(hào)引用轉(zhuǎn)為直接引用

      (5)、初始化(先父后子):為靜態(tài)變量賦值、執(zhí)行static代碼塊

       上面的(2)(3)(4)階段合叫為鏈接階段。


2)創(chuàng)建對(duì)象

       (1)、在堆區(qū)分配對(duì)象所需要的內(nèi)存:分配內(nèi)存包括本類和父類,但是不包括靜態(tài)變量,第一步已經(jīng)說明了

       (2)、對(duì)所有實(shí)例變量進(jìn)行默認(rèn)賦值:將方法區(qū)對(duì)于的實(shí)例變量的定義拷貝一份到堆區(qū),然后進(jìn)行賦值

       (3)、執(zhí)行初始化代碼:先初始化父類然后再初始化子類,初始化之前先執(zhí)行塊代碼然后才是構(gòu)造方法
 
3 總結(jié)

new對(duì)象分兩個(gè)過程,加載并初始化類和創(chuàng)建對(duì)象。




作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號(hào):編程入門到禿頭 或掃描下面二維碼
零基礎(chǔ)入門進(jìn)階人工智能(鏈接)