成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java類(lèi)加載連接和初始化原理解析

瀏覽:3日期:2022-09-04 16:46:37

1、當(dāng)程序使用某個(gè)類(lèi)時(shí),JVM將會(huì)完成以下這三個(gè)步驟

Java類(lèi)加載連接和初始化原理解析

2、連接

1)驗(yàn)證

驗(yàn)證是否是合法的字節(jié)碼文件。驗(yàn)證JDK版本是否正確等。

2)準(zhǔn)備

給成員變量(類(lèi)變量/靜態(tài)變量)賦默認(rèn)值

把常量(final)等值在方法區(qū)的常量池中給準(zhǔn)備好。

3)解析

虛擬機(jī)常量池內(nèi)的符號(hào)引用(常量名)替換為引用(地址)的過(guò)程

3、初始化<clinit> 類(lèi)初始化

<clinit> 類(lèi)初始化由兩部分組成:

(1)靜態(tài)變量的顯示初始化代碼,賦值代碼

(2)靜態(tài)代碼塊

(1) 和 (2) 的順序從上往下

Java類(lèi)加載連接和初始化原理解析

當(dāng)一個(gè)類(lèi)初始化時(shí),發(fā)現(xiàn)他的父類(lèi)沒(méi)有初始化,會(huì)先初始化父類(lèi)。

每一個(gè)類(lèi)只會(huì)初始化一次,并且初始化的過(guò)程時(shí)線(xiàn)程安全的。

哪些操作會(huì)導(dǎo)致類(lèi)的初始化?這句話(huà)的意思是:類(lèi)的加載不一定就會(huì)發(fā)生類(lèi)初始化。

- 以下操作會(huì)發(fā)生類(lèi)初始化:

1)main方法所在的類(lèi)加載時(shí)

2)new一個(gè)類(lèi)的對(duì)象時(shí)

3)調(diào)用該類(lèi)的靜態(tài)變量(final的常量除外) 和 靜態(tài)方法時(shí)

4)使用 java.lang.reflect 包的方法對(duì)類(lèi)進(jìn)行反射調(diào)用時(shí)

5)當(dāng)初始化一個(gè)類(lèi),如果其父類(lèi)沒(méi)有被初始化,則先會(huì)初始化他的父類(lèi)

- 以下操起不會(huì)發(fā)生類(lèi)的初始化:

1)引用靜態(tài)常量不會(huì)觸發(fā)此類(lèi)的初始化(常量在連接階段就存入了方法區(qū)的常量池中)

2)當(dāng)訪(fǎng)問(wèn)一個(gè)靜態(tài)域時(shí),只有真正聲明這個(gè)域的類(lèi)才會(huì)被初始化

當(dāng)通過(guò)子類(lèi)引用父類(lèi)的靜態(tài)變量,不會(huì)導(dǎo)致子類(lèi)初始化

Java類(lèi)加載連接和初始化原理解析

3)通過(guò)數(shù)組定義類(lèi)引用,不會(huì)觸發(fā)此類(lèi)的初始化

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章: