programmer's home, welcome here!

          technical issues and my life

          常用鏈接

          統(tǒng)計

          最新評論

          JAVA虛擬機加載類的方式解析

          虛擬機加載類的途徑:

          1、Dog dog = new Dog();
          這個動作會導(dǎo)致常量池的解析,Dog類被隱式裝載。
          如果當(dāng)前ClassLoader無法找到Dog,則拋出NoClassDefFoundError。

          2、Class clazz = Class.forName(“Dog”);
             Object dog =clazz.newInstance();
          通過反射加載類型,并創(chuàng)建對象實例
          如果無法找到Dog,則拋出ClassNotFoundException。

          3、Class clazz = classLoader.loadClass(“Dog”);
             Object dog =clazz.newInstance();
          通過反射加載類型,并創(chuàng)建對象實例
          如果無法找到Dog,則拋出ClassNotFoundException。

          那么,1和2和3究竟有什么區(qū)別呢?分別用于什么情況呢?

          1和2使用的類加載器是相同的,都是當(dāng)前類加載器。(即:this.getClass.getClassLoader)。
          3由用戶指定類加載器。

          如果需要在當(dāng)前類路徑以外尋找類,則只能采用第3種方式。第3種方式加載的類與當(dāng)前類分屬不同的命名空間。
          當(dāng)前類加載器命名空間對其不可見。當(dāng)然,如果被加載類的超類對于當(dāng)前類命名空間可見的話,則可以進行強制轉(zhuǎn)型。

          第1和第2種情況區(qū)別不大。如果,Dog類在編譯時無法得到,則使用第2種方式。

          另外,第1種和第2種都會導(dǎo)致類被初始化,即:執(zhí)行類的靜態(tài)初始化語句,而第3種情況不會。
          另外注意,第1種拋出Error,第2、3種拋出Exception,它們分屬于不同的異常/錯誤分支。

          posted on 2007-04-11 09:47 crazy zerlot 閱讀(386) 評論(0)  編輯  收藏 所屬分類: J2SE & J2EE ABC

          主站蜘蛛池模板: 棋牌| 东阳市| 哈尔滨市| 宜昌市| 乐安县| 清远市| 栾川县| 南阳市| 肥西县| 中宁县| 梅州市| 襄城县| 都江堰市| 休宁县| 西乡县| 昭平县| 沽源县| 个旧市| 崇义县| 墨脱县| 绥芬河市| 且末县| 桦川县| 留坝县| 克什克腾旗| 河间市| 章丘市| 英山县| 河源市| 日喀则市| 环江| 河间市| 玛沁县| 博客| 临洮县| 楚雄市| 南宁市| 江都市| 介休市| 米脂县| 漳州市|