<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    類的生命周期回顧篇

     一、JAVA虛擬機和JAVA程序的生命周期

      JAVA虛擬機的生命周期和JAVA程序的生命周期一致,當我們在命令行中敲入java命令運行java程序時,java虛擬機進程啟動,程序運行,當程序終止時,則JAVA虛擬機的生命也結(jié)束。

      二、類的生命周期

      1、加載:將.class文件的二進制數(shù)據(jù)放到內(nèi)存方法區(qū)中,并在堆區(qū)中創(chuàng)建一個Class對象,這個Class對象封裝了方法區(qū)的數(shù)據(jù)結(jié)構(gòu),用戶能通過Class對象訪問到方法區(qū)中。

      2、連接

      (1)驗證:驗證.class文件是否是通過JAVA程序編譯出來的,因為有可能這個.class文件是黑客特意制造出來的。

      (2)準備:為類中的靜態(tài)變量分配空間,并初始化為默認值。

      (3)解析:把類的符號引用變?yōu)橹苯右谩?/p>

      3.初始化:為靜態(tài)變量和靜態(tài)塊賦予值。

      JAVA程序?qū)τ陬惖氖褂梅绞剑?/p>

      (1)主動使用。

      (2)被動使用。

      這里注意:

      JAVA虛擬機對于加載和連接的時間節(jié)點是很寬松的,沒有嚴格規(guī)定,可以提前加載也可以;但是對于初始化,JAVA虛擬機規(guī)定當某個類被主動使用時才能初始化。

      我們把3個步驟細講一下:

      1、類的加載:類是通過類加載器進行加載。

      類加載的來源:

      (1)文件系統(tǒng)中的class文件

      (2)jar包

      (3)網(wǎng)絡(luò)中下載。

      類加載目的地:內(nèi)存。

      類加載器分類:

      (1)根類加載器:沒有父類,加載java.lang.*。

      (2)擴展類加載器:父類是根類加載器,用于加載jre\lib\ext的jar包。

      (3)系統(tǒng)類加載器:父類是擴展類加載器,用于加載classpath的jar包。Class scl = Class.getSystemClassLoader();

     (4)自定義加載器:自定義加載,通常父類是系統(tǒng)類加載器。

      注意:通過類虛擬機自帶的(1)(2)(3)加載器是JAVA虛擬機創(chuàng)建的,而他們加載的類,他的生命周期是虛擬機的生命周期,因為始終被加載器鎖引用。

      2、類的解析

      將符號引用轉(zhuǎn)換成直接引用。比如:

      A函數(shù)調(diào)用了B函數(shù),原本只是符號引用即標明引用了B函數(shù),直接引用是將符號改成指針指向B函數(shù)。

      3、類的初始化

      規(guī)則:

      (1)初始化的靜態(tài)變量都是運行時變量,即不能在編譯時就能判斷值是多少。

      (2)初始化的順序就是按照代碼的順序執(zhí)行。

      (3)如果初始化子類時父類還沒有被初始化,則先初始化父類。

      初始化時機:當遇到以下情況會進行初始化。

      (1)new創(chuàng)建實例、反射創(chuàng)建實例、clone創(chuàng)建實例、反序列化創(chuàng)建實例。

      (2)訪問靜態(tài)變量,即讀和寫。

      (3)調(diào)用靜態(tài)方法。

      (4)啟動類需要首先初始化。

      (5)Class.forName();

      注意:

      (1)當遇到編譯時常量,則直接用數(shù)字替換,而不會導(dǎo)致類初始化。比如public static final int a= 3;這就是一個編譯時常量。

      (2)當子類對象調(diào)用父類的靜態(tài)變量或方法,則只對父類進行初始化。比如:Sub.a,其中a是父類的靜態(tài)變量,則只對Base初始化。

      (3)當子類被初始化時,父類一定要先初始化;

      但是如果一個類實現(xiàn)了一個接口,當類被初始化時,不用初始化父接口。

      只有對這個接口進行訪問時,才會對接口進行初始化。

      (4)loader.loadClass("....");只是對類的加載,而不是初始化。

      類加載過程采用“父親委托機制”,即如果loader2的父類是loader1,loader2想要加載test類,則先會檢查loader1是否能夠加載test類,如果能,則通過父類加載。

      運行時包的概念:包名相同,類加載器相同。


    posted on 2011-11-21 10:17 順其自然EVO 閱讀(228) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄

    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲另类激情综合偷自拍图| 亚洲一区二区三区在线观看网站 | 伊人久久亚洲综合| 亚洲国产精品久久久久秋霞影院 | 亚洲国产小视频精品久久久三级 | 69av免费视频| 亚洲色大成网站WWW久久九九| 国产精品免费在线播放| 性做久久久久免费观看| 亚洲综合图片小说区热久久| a毛看片免费观看视频| 免费一级毛片免费播放| 亚洲精品无码专区在线| 午夜无遮挡羞羞漫画免费| 亚洲午夜精品国产电影在线观看| 免费国产在线观看| 97在线观看永久免费视频| 亚洲午夜国产精品无卡| 亚洲精品成人a在线观看| 妻子5免费完整高清电视| 欧洲 亚洲 国产图片综合| 免费看国产精品3a黄的视频| 亚洲午夜无码毛片av久久京东热| 亚洲中文字幕无码日韩| 国产美女精品久久久久久久免费| 美女视频黄a视频全免费网站一区| 日韩成人免费aa在线看| 一级毛片在线免费看| 亚洲毛片基地日韩毛片基地| 精品国产香蕉伊思人在线在线亚洲一区二区| 一级做a爰全过程免费视频毛片| 久久久久亚洲爆乳少妇无| 最近最好的中文字幕2019免费| 伊人久久五月丁香综合中文亚洲 | 亚洲永久无码3D动漫一区| 日日操夜夜操免费视频| 国产在线观看免费观看不卡| 99爱在线观看免费完整版| 亚洲制服丝袜在线播放| 国产成A人亚洲精V品无码| 免费看黄视频网站|