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

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

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

    posts - 89,  comments - 98,  trackbacks - 0

    NoClassDefDoundErr與ClassNotFoundException區(qū)別

    作者:langm

    版權(quán)聲明:本文可以自由轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
    作者:langm
    原文:http://www.matrix.org.cn/resource/article/44/44056_NoClassDefDoundErr.html
    關(guān)鍵字:NoClassDefDoundErr ClassNotFoundException

    在讀這篇文章之前,你最好了解一下Java的Exception機(jī)制。

    也許你在開(kāi)發(fā)的過(guò)程中經(jīng)常地見(jiàn)到ClassNotFoundException和NoClassDefFoundErr這兩個(gè)異常,每每看到之后,都會(huì)一概而論的是類沒(méi)有找到,但有些時(shí)候見(jiàn)到他們的時(shí)候又有些疑惑(至少我是這樣),為什么Java要用兩個(gè)異常來(lái)表示類定義沒(méi)有找到那?他們之間有什么區(qū)別那?

    正巧今天我又碰到了這個(gè)問(wèn)題,順便的仔細(xì)研究了一下這兩個(gè)異常的區(qū)別。
    首先:
    ClassNotFoundException直接繼承與Exception,它是一個(gè)checked的異常。
    NoClassDefFoundErr 繼承自Error->LinkageError ,它是一個(gè)unchecked的異常。

    下面讓我們看一下兩個(gè)異常在API文檔中的說(shuō)明

    ClassNotFoundException:
    當(dāng)應(yīng)用嘗試用字符串名稱通過(guò)下面的方法裝載一個(gè)類時(shí)這個(gè)類的定義卻沒(méi)有找到時(shí)會(huì)拋出的異常。
    Class.forName
    ClassLoader.findSystemClass
    ClassLoader.loadClass

    NoClassDefFoundErr:
    當(dāng)JVM或者ClassLoader實(shí)例嘗試裝載一個(gè)類的定義(這通常是一個(gè)方法調(diào)用或者new表達(dá)式創(chuàng)建一個(gè)實(shí)例過(guò)程的一部分)而這個(gè)類定義并沒(méi)有找時(shí)所拋出的錯(cuò)誤。
    當(dāng)編譯的時(shí)候可以找到這個(gè)類的定義,但是以后這個(gè)類不再存在。

    這比較顯而易見(jiàn)了吧,讀好文檔是很重要的事情。這里我就說(shuō)一下我對(duì)這兩個(gè)類的區(qū)別的理解。

    ClassNotFoundException異常只出現(xiàn)在你的應(yīng)用程序主動(dòng)的裝載類的過(guò)程中,這個(gè)異常很多時(shí)候出現(xiàn)在我們的應(yīng)用框架在初始化或者運(yùn)行中動(dòng)態(tài)裝載已配置的類的過(guò)程中。這種情況下我們應(yīng)該首先檢查我們的配置或者參數(shù)是否錯(cuò)誤,是否企圖裝載一個(gè)并不存在的類,如果配置沒(méi)有錯(cuò)誤,我們就應(yīng)該查看Classpath是否配置錯(cuò)誤而導(dǎo)致ClassLoader無(wú)法找到這個(gè)類,也應(yīng)該檢查要裝載的類是否在一個(gè)jar包中而我們?cè)谝脒@個(gè)jar包的過(guò)程中是否有遺漏或錯(cuò)誤(這里jar包的版本也是一個(gè)需要格外注意的問(wèn)題,很多時(shí)候混亂的jar包版本會(huì)造成太多的麻煩)。

    NoClassDefFoundErr異常一般出現(xiàn)在我們編譯環(huán)境和運(yùn)行環(huán)境不一致的情況下,就是說(shuō)我們有可能在編譯過(guò)后更改了Classpath或者jar包所以導(dǎo)致在運(yùn)行的過(guò)程中JVM或者ClassLoader無(wú)法找到這個(gè)類的定義(我曾經(jīng)在編譯后作了一次jar包的清理,然后應(yīng)用就送給了我一個(gè)這樣的禮物)。

    我們經(jīng)常用SDK開(kāi)發(fā)應(yīng)用,開(kāi)發(fā)的過(guò)程中要引入很多jar包,有些SDK也會(huì)設(shè)定自己的Classpath。編譯過(guò)程結(jié)束后在運(yùn)行的過(guò)程中就要將已開(kāi)發(fā)的應(yīng)用和所有引入的jar包拷貝到應(yīng)用服務(wù)器的相應(yīng)目錄下才可以運(yùn)行,而應(yīng)用服務(wù)器使用的Classpath也很有可能與SDK的不同,在這個(gè)過(guò)程中就有很大的幾率造成雙方環(huán)境不一致。所以很多開(kāi)發(fā)者就會(huì)遇到在SDK中可以編譯,運(yùn)行也沒(méi)有問(wèn)題,但是同樣的程序放到應(yīng)用服務(wù)器上就出現(xiàn)NoClassDefFoundErr這個(gè)異常這種情況,這是讓初學(xué)者很撓頭的一個(gè)問(wèn)題。

    以上就是我對(duì)這兩個(gè)異常的一點(diǎn)個(gè)人理解,希望對(duì)各位開(kāi)發(fā)者有所幫助,可以讓各位開(kāi)發(fā)者在以后的開(kāi)發(fā)過(guò)程中能夠更快的找到問(wèn)題所在。祝開(kāi)發(fā)順利

    posted on 2006-10-27 10:53 水煮三國(guó) 閱讀(605) 評(píng)論(0)  編輯  收藏 所屬分類: J2SE
    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(4)

    隨筆分類(85)

    隨筆檔案(89)

    文章分類(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 211659
    • 排名 - 266

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 精品无码人妻一区二区免费蜜桃| 亚洲精品国产综合久久久久紧| 亚洲精彩视频在线观看| 亚洲国产成a人v在线| 国产精品免费一区二区三区四区| 无码专区永久免费AV网站| 亚洲国产成+人+综合| 免费播放美女一级毛片| 日本在线免费观看| 免费理论片51人人看电影| 亚洲av不卡一区二区三区| 亚洲黄色在线播放| 一级毛片免费播放试看60分钟| 久久综合九色综合97免费下载| 久久久久av无码免费网| 亚洲精品国产V片在线观看 | 国产成人亚洲精品无码AV大片| 中文在线免费观看| 毛片免费在线观看网址| 亚洲国产精品免费观看 | 久久经典免费视频| 亚洲AV日韩AV天堂久久| 久久久精品2019免费观看| 亚洲色欲色欲www| 免费观看的av毛片的网站| 亚洲国产综合AV在线观看| 亚洲一区免费观看| www.免费在线观看| 亚洲中文字幕人成乱码 | 亚洲AV日韩AV永久无码久久| 亚洲国产精品成人AV在线| 久久精品一本到99热免费| 思思re热免费精品视频66| 亚洲人成电影亚洲人成9999网| 国产一级黄片儿免费看| 青娱分类视频精品免费2| 亚洲另类激情专区小说图片| 亚洲AV无码男人的天堂| 亚洲成a人一区二区三区| 97超高清在线观看免费视频| 最新69国产成人精品免费视频动漫 |