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

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

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

    呆呆向前沖的blog

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      78 隨筆 :: 43 文章 :: 5 評(píng)論 :: 74 Trackbacks

    隱式方法:new
    顯式方法:
    1。java.lang.Class的forName方法
    2。java.lang.ClassLoader里的loadClass方法


    ◆ 無(wú)法自行產(chǎn)生Class的實(shí)體,因?yàn)闃?gòu)造函數(shù)聲明為private。
    ◇ 只能通過(guò)Object的getClass方法,或者Class.forName("類名")獲得。
    ◆ Class類的實(shí)體在第一次載入內(nèi)存時(shí)就建立了。以后在程序中產(chǎn)生Class代表的類的實(shí)體,其內(nèi)部都會(huì)有個(gè)字段記錄著這個(gè)Class類所在的位置。
    ◇  可以把每個(gè)Class類的實(shí)體當(dāng)作是某個(gè)類(*.class)在內(nèi)存中的代理。
    ◆ 在Java中,每個(gè)類都是由某個(gè)類加載器(ClassLoader)來(lái)載入的,因此在Class類的實(shí)體中,由字段記錄載入它的ClassLoader的實(shí)體。如果該字段是null,不代表它不是由類裝載器所載入,而是代表這個(gè)類由引導(dǎo)式裝載器(bootstrap loader)載入。但是這個(gè)裝載器不是java編寫的,所以沒有實(shí)體。
    classloader.jpg
                                                                                        圖1
    注意:系統(tǒng)里同時(shí)存在多個(gè)ClassLoader實(shí)體。而且一個(gè)類裝載器可以載入多個(gè)類

    ★ 使用已有類裝載器

    1        Office off = new Office();
    2        ClassLoader loader = off.getClass().getClassLoader();
    3        Class c = loader.loadClass(args[0]);
    4        Object o = c.newInstance();

    注意:loadClass方法加載類時(shí)不會(huì)自動(dòng)調(diào)用靜態(tài)初始化塊(static塊),必須等到第一次實(shí)體化該類時(shí),才會(huì)調(diào)用。這與forName時(shí)傳入第二個(gè)參數(shù)為false的效果相同。

    下面是上述代碼的另一種寫法:

    1        Class cb = Office.class;
    2        ClassLoader loader = cb.getClassLoader();
    3        Class c = loader.loadClass(args[0]);        
    4        Object o = c.newInstance();

    ★ 自己建立類裝載器來(lái)載入類

    URLClassLoader

    ★ 類裝載器的階層體系

    Java程序運(yùn)行流程:

    shur輸入java ***.class,java.exe根據(jù)自己的搜索邏輯找到JRE,接著找到位于JRE中的jvm.dll(真正的java虛擬機(jī))。最后載入這個(gè)動(dòng)態(tài)鏈接庫(kù),激活java虛擬機(jī)。
          虛擬機(jī)一旦激活,會(huì)先做一些初始化操作,如獲取系統(tǒng)參數(shù)。
         初始化完成后,產(chǎn)生第一個(gè)類裝載器 Bootstrap Loader。然后做一些基本的初始化,然后它載入sun.misc命名空間底下的Launcher.java之中的ExtClassLoader,并設(shè)置其parent為null。然后Bootstrap Loader會(huì)繼續(xù)載入sun.misc命名空間下的Launcher.java之中的AppClassLoader,并設(shè)置其parent為剛載入的ExtClassLoader實(shí)體
          最后由AppClassLoader負(fù)責(zé)載入***.class。
          注意:上述三個(gè)類裝載器搜索類的路徑都是載入時(shí)讀取的,分別是“sun.boot.class.path”、“java.ext.dirs”、“java.class.path”,而且在虛擬機(jī)中只保留一份。在系統(tǒng)運(yùn)行過(guò)程中不可能動(dòng)態(tài)改變,除非使用新的類裝載器。

    ★ 委托模型

          類裝載器有載入類的需求時(shí),會(huì)先請(qǐng)示其Parent使用其搜索路徑幫忙載入。如果Parent找不到,才由自己依照自己的搜索路徑搜索類。







     

    posted on 2005-07-19 00:57 呆呆向前沖的blog 閱讀(347) 評(píng)論(0)  編輯  收藏 所屬分類: 工作:Java技術(shù)
    主站蜘蛛池模板: 最新中文字幕电影免费观看| 亚洲av综合av一区| 国内永久免费crm系统z在线| 亚洲人成网址在线观看| 午夜私人影院免费体验区| 巨胸狂喷奶水视频www网站免费| 久久精品国产亚洲AV无码麻豆| 真实乱视频国产免费观看| a毛片在线免费观看| 亚洲一区二区无码偷拍| 亚洲日韩欧洲无码av夜夜摸| 91网站免费观看| 国产免费MV大全视频网站| 国产精品亚洲午夜一区二区三区| 久久久久久A亚洲欧洲AV冫| 中文字幕影片免费在线观看| 免费人成激情视频在线观看冫| 亚洲中文字幕无码中文| 无码乱人伦一区二区亚洲一| 国产免费私拍一区二区三区| 毛片免费全部播放无码| 亚洲精品视频免费| 亚洲欧美国产日韩av野草社区| 亚洲丝袜美腿视频| 中文亚洲AV片在线观看不卡| 最近免费中文字幕大全视频| 午夜网站在线观看免费完整高清观看 | 在线观看日本亚洲一区| 最新国产AV无码专区亚洲| 午夜视频免费成人| 日本XXX黄区免费看| 国产精品区免费视频| 亚洲日韩在线观看免费视频| 亚洲狠狠婷婷综合久久蜜芽| 亚洲精品亚洲人成在线麻豆| 国产亚洲精品美女久久久| yy6080亚洲一级理论| 热久久精品免费视频| 中国在线观看免费高清完整版| 一级毛片免费观看不卡的| 丁香花在线观看免费观看图片|