欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Java在線學(xué)習(xí)詳解JAVA類加載機(jī)制

2018-05-22 14:23:17 1232瀏覽

廢話不多說了,本篇文章小編帶大家看一下扣丁學(xué)堂Java在線學(xué)習(xí)詳解的JAVA類加載機(jī)制,文章中會列出編寫的代碼,小伙伴一起來看一下吧。


扣丁學(xué)堂Java在線學(xué)習(xí)詳解JAVA類加載機(jī)制


JAVA源碼編譯由三個過程組成:


1、源碼編譯機(jī)制。

2、類加載機(jī)制

3、類執(zhí)行機(jī)制


我們這里主要介紹編譯和類加載這兩種機(jī)制。



一、源碼編譯


代碼編譯由JAVA源碼編譯器來完成。主要是將源碼編譯成字節(jié)碼文件(class文件)。字節(jié)碼文件格式主要分為兩部分:常量池和方法字節(jié)碼。



二、類加載


類的生命周期是從被加載到虛擬機(jī)內(nèi)存中開始,到卸載出內(nèi)存結(jié)束。過程共有七個階段,其中到初始化之前的都是屬于類加載的部分


加載----驗(yàn)證----準(zhǔn)備----解析-----初始化----使用-----卸載


系統(tǒng)可能在第一次使用某個類時(shí)加載該類,也可能采用預(yù)加載機(jī)制來加載某個類,當(dāng)運(yùn)行某個java程序時(shí),會啟動一個java虛擬機(jī)進(jìn)程,兩次運(yùn)行的java程序處于兩個不同的JVM進(jìn)程中,兩個jvm之間并不會共享數(shù)據(jù)。



1、加載階段


這個流程中的加載是類加載機(jī)制中的一個階段,這兩個概念不要混淆,這個階段需要完成的事情有:


1)通過一個類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流。

2)將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。

3)在java堆中生成一個代表這個類的Class對象,作為訪問方法區(qū)中這些數(shù)據(jù)的入口。


由于第一點(diǎn)沒有指明從哪里獲取以及怎樣獲取類的二進(jìn)制字節(jié)流,所以這一塊區(qū)域留給我開發(fā)者很大的發(fā)揮空間。這個我在后面的類加載器中在進(jìn)行介紹。



2、準(zhǔn)備階段

這個階段正式為類變量(被static修飾的變量)分配內(nèi)存并設(shè)置類變量初始值,這個內(nèi)存分配是發(fā)生在方法區(qū)中。


1、注意這里并沒有對實(shí)例變量進(jìn)行內(nèi)存分配,實(shí)例變量將會在對象實(shí)例化時(shí)隨著對象一起分配在JAVA堆中。


2、這里設(shè)置的初始值,通常是指數(shù)據(jù)類型的零值。

private static int a = 3;


這個類變量a在準(zhǔn)備階段后的值是0,將3賦值給變量a是發(fā)生在初始化階段。


3、初始化階段


初始化是類加載機(jī)制的最后一步,這個時(shí)候才正真開始執(zhí)行類中定義的JAVA程序代碼。在前面準(zhǔn)備階段,類變量已經(jīng)賦過一次系統(tǒng)要求的初始值,在初始化階段最重要的事情就是對類變量進(jìn)行初始化,關(guān)注的重點(diǎn)是父子類之間各類資源初始化的順序。


java類中對類變量指定初始值有兩種方式:1、聲明類變量時(shí)指定初始值;2、使用靜態(tài)初始化塊為類變量指定初始值。


初始化的時(shí)機(jī)



1)創(chuàng)建類實(shí)例的時(shí)候,分別有:1、使用new關(guān)鍵字創(chuàng)建實(shí)例;2、通過反射創(chuàng)建實(shí)例;3、通過反序列化方式創(chuàng)建實(shí)例。


new Test();
Class.forName(“com.mengdd.Test”);


2)調(diào)用某個類的類方法(靜態(tài)方法)


Test.doSomething();


3)訪問某個類或接口的類變量,或?yàn)樵擃愖兞抠x值。

 

int b=Test.a;
Test.a=b;


4)初始化某個類的子類。當(dāng)初始化子類的時(shí)候,該子類的所有父類都會被初始化。


5)直接使用java.exe命令來運(yùn)行某個主類。

除了上面幾種方式會自動初始化一個類,其他訪問類的方式都稱不會觸發(fā)類的初始化,稱為被動引用。


1、子類引用父類的靜態(tài)變量,不會導(dǎo)致子類初始化。


public class SupClass
{
 public static int a = 123;
 static
 {
  System.out.println("supclass init");
 }
}
public class SubClass extends SupClass
{
 static
 {
  System.out.println("subclass init");
 }
}
public class Test
{
 public static void main(String[] args)
 {
  System.out.println(SubClass.a);
 }
}

執(zhí)行結(jié)果:

supclass init
123


2、通過數(shù)組定義引用類,不會觸發(fā)此類的初始化


public class SupClass
{
 public static int a = 123;
 static
 {
  System.out.println("supclass init");
 }
}
public class Test
{
 public static void main(String[] args)
 {
  SupClass[] spc = new SupClass[10];
 }
}

執(zhí)行結(jié)果:


3、引用常量時(shí),不會觸發(fā)該類的初始化


public class ConstClass
{
 public static final String A= "MIGU";
 static
 {
  System.out.println("ConstCLass init");
 }
}
public class TestMain
{
 public static void main(String[] args)
 {
  System.out.println(ConstClass.A);
 }
}



執(zhí)行結(jié)果:


MIGU


用final修飾某個類變量時(shí),它的值在編譯時(shí)就已經(jīng)確定好放入常量池了,所以在訪問該類變量時(shí),等于直接從常量池中獲取,并沒有初始化該類。



初始化的步驟:


1、如果該類還沒有加載和連接,則程序先加載該類并連接。

2、如果該類的直接父類沒有加載,則先初始化其直接父類。

3、如果類中有初始化語句,則系統(tǒng)依次執(zhí)行這些初始化語句。

在第二個步驟中,如果直接父類又有直接父類,則系統(tǒng)會再次重復(fù)這三個步驟來初始化這個父類,依次類推,JVM最先初始化的總是java.lang.Object類。當(dāng)程序主動使用任何一個類時(shí),系統(tǒng)會保證該類以及所有的父類都會被初始化。



好了,關(guān)于扣丁學(xué)堂Java在線學(xué)習(xí)詳解Java類加載機(jī)制就先給大家分享這些,想要學(xué)習(xí)Java的小伙伴快到扣丁學(xué)堂Java培訓(xùn)報(bào)名學(xué)習(xí)吧??鄱W(xué)堂不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的Java在線視頻供學(xué)員觀看學(xué)習(xí),想要學(xué)好Java設(shè)計(jì)高薪就業(yè)的小伙伴快快行動吧。Java技術(shù)交流群:670348138。



扣丁學(xué)堂微信公眾號

【關(guān)注微信公眾號免費(fèi)領(lǐng)取丁豆獲取更多學(xué)習(xí)資料】



查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>


標(biāo)簽: 扣丁學(xué)堂Java在線學(xué)習(xí) JAVA類加載機(jī)制 Java培訓(xùn) Java基礎(chǔ)教程 Java學(xué)習(xí)視頻 Java教學(xué)視頻 java入門教程 Java教程視頻 java在線學(xué)習(xí) java在線視頻 java在線教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部