Jhonney的專(zhuān)欄

             ----人見(jiàn)人愛(ài)
          隨筆 - 49, 文章 - 1, 評(píng)論 - 23, 引用 - 0
          數(shù)據(jù)加載中……

          classloader

          classloader 和class.forname的區(qū)別
          項(xiàng)目中,發(fā)生了classcast異常,源碼處寫(xiě)的是Thread.currentThread.getContextClassLoader
          后來(lái)改成class.forname后OK啦
          Class.forName(String clz);
          使用調(diào)用這個(gè)語(yǔ)句的對(duì)象所使用的ClassLoader作為ClassLoader(
          1)。

          Thread.currentThread().getContextClassLoader())
          返回當(dāng)前線程使用的ClassLoader(
          2)。


          如果ClassLoader(
          1)“等于”ClassLoader(2),那么這里的使用Class.forName(String clz)和ClassLoader(2).loadClass(String clz)就是等價(jià)的。

          如果ClassLoader(
          1)“不等于”ClassLoader(2),那么就是不等價(jià)的。

          在框架代碼中,實(shí)際情況是ClassLoader(
          1)往往“不等于”ClassLoader(2):
          即調(diào)用Class.forName(String clz)的語(yǔ)句所在的類(lèi)的裝載器不一定就是當(dāng)前線程使用的類(lèi)裝載器。
          因?yàn)椋阂粋€(gè)類(lèi)裝載完了在運(yùn)行了,該類(lèi)的所屬的類(lèi)裝載器就確定了(不變),而在程序運(yùn)行之中,線程
          的類(lèi)裝載器都隨時(shí)可以通過(guò)hread.currentThread().setContextClassLoader(loader)進(jìn)行改變(變)。
          程序中出現(xiàn)的錯(cuò)誤,可能是由于平臺(tái)的classloader是另一套機(jī)制

          posted on 2008-03-23 00:19 Jhonney 閱讀(383) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁晋县| 松江区| 政和县| 丁青县| 涟水县| 乌拉特后旗| 内江市| 镇江市| 铜陵市| 龙泉市| 文昌市| 花莲县| 正定县| 塔城市| 阿图什市| 淮北市| 南通市| 涞源县| 平利县| 荥经县| 永兴县| 依兰县| 汉沽区| 灵山县| 双辽市| 都匀市| 怀集县| 北川| 夹江县| 高邑县| 灌阳县| 沾化县| 喀喇| 安图县| 乐业县| 绿春县| 宝清县| 平度市| 尉氏县| 潮州市| 翁源县|