MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          ClassNotFoundException發(fā)生在裝入階段。
          當(dāng)應(yīng)用程序試圖通過(guò)類的字符串名稱,使用常規(guī)的三種方法裝入類,但卻找不到指定名稱的類定義時(shí)就拋出該異常。

          NoClassDefFoundError: 當(dāng)目前執(zhí)行的類已經(jīng)編譯,但是找不到它的定義時(shí)

          也就是說(shuō)你如果編譯了一個(gè)類B,在類A中調(diào)用,編譯完成以后,你又刪除掉B,運(yùn)行A的時(shí)候那么就會(huì)出現(xiàn)這個(gè)錯(cuò)誤

          加載時(shí)從外存儲(chǔ)器找不到需要的class就出現(xiàn)ClassNotFoundException
          連接時(shí)從內(nèi)存找不到需要的class就出現(xiàn)NoClassDefFoundError

          大概這樣的吧,JDK API里面的解釋
          1.NoClassDefFoundError
          當(dāng) Java 虛擬機(jī)或 ClassLoader 實(shí)例試圖在類的定義中加載(作為通常方法調(diào)用的一部分或者作為使用 new 表達(dá)式創(chuàng)建的新實(shí)例的一部分),但無(wú)法找到該類的定義時(shí),拋出此異常。
          當(dāng)前執(zhí)行的類被編譯時(shí),所搜索的類定義存在,但無(wú)法再找到該定義。

          2.ClassNotFoundException
          當(dāng)應(yīng)用程序試圖使用以下方法通過(guò)字符串名加載類時(shí),拋出該異常:
          * Class 類中的 forName 方法。
          * ClassLoader 類中的 findSystemClass 方法。
          * ClassLoader 類中的 loadClass 方法。
          但是沒(méi)有找到具有指定名稱的類的定義。從 1.4 版本開(kāi)始,此異常已經(jīng)更新,以符合通用的異常鏈機(jī)制。在構(gòu)造時(shí)提供并通過(guò) getException() 方法訪問(wèn)的“加載類時(shí)引發(fā)的可選異常”,現(xiàn)在被稱為原因,它可以通過(guò) Throwable.getCause() 方法以及與上面提到的“遺留方法”來(lái)訪問(wèn)。

          見(jiàn)http://www.javaeye.com/topic/21141?page=1


          評(píng)論

          # re: ClassNotFoundException和NoClassDefError之間的區(qū)別  回復(fù)  更多評(píng)論   

          2009-11-22 17:35 by 11
          java.lang.NoClassDefFoundError出現(xiàn)的可能幾種情況
          1、確實(shí)有某個(gè)類不存在。
          2、某個(gè)類所依賴的class或jar不存在,導(dǎo)致未正常加載。
          3、單實(shí)例類,由于初始化出錯(cuò),也會(huì)拋出該error。
          4、對(duì)于有些框架,自動(dòng)生成java bean的時(shí)候,如果相應(yīng)的class沒(méi)有提供默認(rèn)構(gòu)造函數(shù),會(huì)拋此異常。

          # re: ClassNotFoundException和NoClassDefError之間的區(qū)別  回復(fù)  更多評(píng)論   

          2009-11-22 17:35 by 11
          還有幾種情況
          1、類文件存在,但處于不同的Domain中,有可能無(wú)法正常加載,特別是基于OSGI的體系,這種情況很常見(jiàn)
          2、即使一個(gè)類不是單例,如果有static{}代碼,其中出錯(cuò)了,也無(wú)法加載

          # re: ClassNotFoundException和NoClassDefError之間的區(qū)別  回復(fù)  更多評(píng)論   

          2009-11-22 17:36 by 11
          真的是NoClassDefFoundError嗎

          前兩天碰到一個(gè)奇怪的問(wèn)題,異常的信息就是NoClassDefFoundError,但是需要加載的類肯定是可以找得到的,最后問(wèn)題的根源在于內(nèi)存不足,由于產(chǎn)品需要加載的類非常的多,到現(xiàn)在我們的maxPermSize已經(jīng)需要設(shè)置為128m了,而那個(gè)錯(cuò)誤就是由于內(nèi)存不足,類初始化的時(shí)候內(nèi)存不足無(wú)法初始化成功導(dǎo)致出現(xiàn) NoClassDefFoundError,這個(gè)就讓我聯(lián)想到原來(lái)經(jīng)常遇到的類實(shí)例初始化的異常,最終報(bào)的錯(cuò)也是 NoClassDefFoundError,呵呵,所以,以后遇到這個(gè)異常要仔細(xì)看看后面的詳細(xì)異常信息,如果是<clinit>拋出的,基本上就是初始化失敗而不是真正的找不到類定義了。
          http://www.jiehoo.com/%E7%9C%9F%E7%9A%84%E6%98%AFnoclassdeffounderror%E5%90%97.htm

          # re: ClassNotFoundException和NoClassDefError之間的區(qū)別  回復(fù)  更多評(píng)論   

          2016-01-15 17:39 by jiangzx
          NoClassDefFound may indicate the class is not there, as the javadocs indicate, but it is typically thrown when, after the classloader has loaded the bytes for the class and calls "defineClass" on them. Also carefully check your full stack trace for other clues or possible "cause" Exceptions (though your particular backtrace shows none).

          From: http://stackoverflow.com/questions/1401111/noclassdeffounderror-could-not-initialize-class-error
          主站蜘蛛池模板: 宜君县| 新津县| 漳平市| 海阳市| 正阳县| 托里县| 嘉黎县| 常熟市| 茂名市| 通道| 城市| 昭觉县| 洛扎县| 曲水县| 宁南县| 封开县| 鄄城县| 张家界市| 恩平市| 威海市| 胶南市| 二连浩特市| 乐陵市| 汶上县| 肃南| 泸水县| 北票市| 白银市| 吉首市| 乐亭县| 原阳县| 西昌市| 肃宁县| 遵义市| 石景山区| 孝昌县| 黔西县| 武宣县| 玉树县| 军事| 房山区|