Java類加載連接和初始化原理解析
1、當(dāng)程序使用某個(gè)類時(shí),JVM將會(huì)完成以下這三個(gè)步驟
2、連接
1)驗(yàn)證
驗(yàn)證是否是合法的字節(jié)碼文件。驗(yàn)證JDK版本是否正確等。
2)準(zhǔn)備
給成員變量(類變量/靜態(tài)變量)賦默認(rèn)值
把常量(final)等值在方法區(qū)的常量池中給準(zhǔn)備好。
3)解析
虛擬機(jī)常量池內(nèi)的符號(hào)引用(常量名)替換為引用(地址)的過(guò)程
3、初始化 <clinit> 類初始化
<clinit> 類初始化由兩部分組成:
(1)靜態(tài)變量的顯示初始化代碼,賦值代碼
?。?)靜態(tài)代碼塊
(1) 和 (2) 的順序從上往下
當(dāng)一個(gè)類初始化時(shí),發(fā)現(xiàn)他的父類沒(méi)有初始化,會(huì)先初始化父類。
每一個(gè)類只會(huì)初始化一次,并且初始化的過(guò)程時(shí)線程安全的。
哪些操作會(huì)導(dǎo)致類的初始化?這句話的意思是:類的加載不一定就會(huì)發(fā)生類初始化。
- 以下操作會(huì)發(fā)生類初始化:
1)main方法所在的類加載時(shí)
2)new一個(gè)類的對(duì)象時(shí)
3)調(diào)用該類的靜態(tài)變量(final的常量除外) 和 靜態(tài)方法時(shí)
4)使用 java.lang.reflect 包的方法對(duì)類進(jìn)行反射調(diào)用時(shí)
5)當(dāng)初始化一個(gè)類,如果其父類沒(méi)有被初始化,則先會(huì)初始化他的父類
- 以下操起不會(huì)發(fā)生類的初始化:
1)引用靜態(tài)常量不會(huì)觸發(fā)此類的初始化(常量在連接階段就存入了方法區(qū)的常量池中)
2)當(dāng)訪問(wèn)一個(gè)靜態(tài)域時(shí),只有真正聲明這個(gè)域的類才會(huì)被初始化
當(dāng)通過(guò)子類引用父類的靜態(tài)變量,不會(huì)導(dǎo)致子類初始化
3)通過(guò)數(shù)組定義類引用,不會(huì)觸發(fā)此類的初始化
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java基礎(chǔ)之自定義類加載器
- Java虛擬機(jī)之類加載
- 概述java虛擬機(jī)中類的加載器及類加載過(guò)程
- 淺談Java自定義類加載器及JVM自帶的類加載器之間的交互關(guān)系
- java類加載機(jī)制、類加載器、自定義類加載器的案例
- 源碼解析Java類加載器
- jvm之java類加載機(jī)制和類加載器(ClassLoader)的用法
- Java類加載器層次結(jié)構(gòu)原理解析
- 淺談JAVA 類加載器
- Java類加載機(jī)制實(shí)現(xiàn)流程及原理詳解
- 詳解JAVA類加載機(jī)制
- Java類加載機(jī)制實(shí)現(xiàn)步驟解析
- Java基于自定義類加載器實(shí)現(xiàn)熱部署過(guò)程解析
- Java類加載器ClassLoader用法解析
- Java類加載器和類加載機(jī)制實(shí)例分析
- Java實(shí)現(xiàn)的自定義類加載器示例
- 通過(guò)面試題解析 Java 類加載機(jī)制
- java類加載相關(guān)知識(shí)總結(jié)
相關(guān)文章
利用Maven入手Spring Boot第一個(gè)程序詳解
這篇文章主要給大家介紹了關(guān)于如何利用Maven入手Spring Boot第一個(gè)程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02關(guān)于Java三大特性之多態(tài)的總結(jié)
這篇文章主要介紹了關(guān)于Java三大特性之多態(tài)的總結(jié),內(nèi)容詳細(xì),涉及多態(tài)的定義,存在條件,好處,分類及實(shí)現(xiàn)方式等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Maven項(xiàng)目引用第三方j(luò)ar包找不到類ClassNotFoundException
這篇文章主要為大家介紹了Maven項(xiàng)目引用第三方j(luò)ar包找不到類ClassNotFoundException解決及原因分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07使用maven對(duì)springboot項(xiàng)目進(jìn)行瘦身分離jar的多種處理方案
springboot項(xiàng)目打包一般我們都使用它自帶的spring-boot-maven-plugin插件,這個(gè)插件默認(rèn)情況下,會(huì)把所有的依賴包全部壓縮到一個(gè)jar里面,今天給大家分享幾種方案來(lái)如何減小我們的打包文件,需要的朋友可以參考下2024-02-02SpringBoot多環(huán)境開(kāi)發(fā)與日志小結(jié)
這篇文章主要介紹了SpringBoot多環(huán)境開(kāi)發(fā)與日志,下面給大家說(shuō)一下如何基于多環(huán)境開(kāi)發(fā)做配置獨(dú)立管理,務(wù)必掌握,需要的朋友可以參考下2022-08-08Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限詳解
這篇文章主要介紹了Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限詳解, 通過(guò)Mybatis攔截器我們可以攔截某些方法的調(diào)用,我們可以選擇在這些被攔截的方法執(zhí)行前后加上某些邏輯,需要的朋友可以參考下2023-11-11