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

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

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

    我的Blog我做主^_^

    走向一條通往JAVA的不歸路...

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      64 隨筆 :: 68 文章 :: 77 評論 :: 0 Trackbacks
    在java中,類裝載異常雖然不是很常見,可如果發(fā)生異常,其處理還是比較麻煩的。
    ??? 下面的幾種異常是比較常見的:
    ClassNotFoundException
    ??? ClassNotFoundException 是最常見的類裝入異常類型。它發(fā)生在裝入階段。Java 規(guī)范對 ClassNotFoundException 的描述是這樣的:
    ??? 當(dāng)應(yīng)用程序試圖通過類的字符串名稱,使用以下三種方法裝入類,但卻找不到指定名稱的類定義時拋出該異常。
    ??? * 類 Class 中的 forName() 方法。
    ??? * 類 ClassLoader 中的 findSystemClass() 方法。
    ??? * 類 ClassLoader 中的 loadClass() 方法。
    ??? 所以,如果顯式地裝入類的嘗試失敗,那么就拋出 ClassNotFoundException。
    ??? 這些異常修復(fù)起來通常比較簡單??梢杂? verbose 選項檢查類路徑,確保使用的類路徑設(shè)置正確。如果類路徑設(shè)置正確,但是仍然看到這個錯誤,那么就是需要的類在類路徑中不存在。要修復(fù)這個問題,可以把類移動到類路徑中指定的目錄或 JAR 文件中,或者把類所在的位置添加到類路徑中。

    NoClassDefFoundError
    ??? NoClassDefFoundError 是類裝入器在裝入階段拋出的另一個常見異常。JVM 規(guī)范對 NoClassDefFoundError 的定義如下:
    ??? 如果 Java 虛擬機或 ClassLoader 實例試圖裝入類定義(作為正常的方法調(diào)用的一部分,或者作為使用 new 表達式創(chuàng)建新實例的一部分),但卻沒有找到類定義時拋出該異常。
    ??? 當(dāng)目前執(zhí)行的類已經(jīng)編譯,但是找不到它的定義時,會存在 searched-for 類定義。
    ??? 實際上,這意味著 NoClassDefFoundError 的拋出,是不成功的隱式類裝入的結(jié)果。
    ??? 簡單說來,就是引用的類在類路徑中沒有找到。
    ClassCastException
    ??? 類裝入器能夠拋出的另一個異常是 ClassCastException。它是在類型比較中發(fā)現(xiàn)不兼容類型的時候拋出的。JVM 規(guī)范指定 ClassCastException 是:
    ??? 該異常的拋出,表明代碼企圖把對象的類型轉(zhuǎn)換成一個子類,而該對象并不是這個子類的實例。
    UnsatisfiedLinkError
    ??? 在把本地方法調(diào)用鏈接到對應(yīng)的本機定義時,類裝入器扮演著重要角色。如果程序試圖裝入一個不存在或者放錯的本機庫時,在鏈接階段的解析過程會發(fā)生 UnsatisfiedLinkError。JVM 規(guī)范指定 UnsatisfiedLinkError 是:
    ??? 對于聲明為 native 的方法,如果 Java 虛擬機找不到和它對應(yīng)的本機語言定義,就會拋出該異常。
    ??? 當(dāng)調(diào)用本機方法時,類裝入器會嘗試裝入定義了該方法的本機庫。如果找不到這個庫,就會拋出這個錯誤。
    ??? 本機庫的裝入由調(diào)用 System.loadLibrary() 方法的類的類裝入器啟動 ,根據(jù)使用的類裝入器,會搜索不同的位置:
    ??? * 對于由 bootstrap 類裝入器裝入的類,搜索 sun.boot.library.path。
    ??? * 對于由擴展類裝入器裝入的類,先搜索 java.ext.dirs,然后是 sun.boot.library.path,然后是 java.library.path。
    ??? * 對于由系統(tǒng)類裝入器裝入的類,搜索 sun.boot.library.path,然后是 java.library.path。
    ClassCircularityError
    ??? JVM 規(guī)范指定 ClassCircularityError 的拋出條件是:
    ??? 類或接口由于是自己的超類或超接口而不能被裝入。
    ??? 這個錯誤是在鏈接階段的解析過程中拋出的。這個錯誤有點奇怪,因為 Java 編譯器不允許發(fā)生這種循環(huán)情況。但是,如果獨立地編譯類,然后再把它們放在一起,就可能發(fā)生這個錯誤。
    ClassFormatError
    JVM 規(guī)范指出,拋出 ClassFormatError 的條件是:
    ??? 負責(zé)指定所請求的編譯類或接口的二進制數(shù)據(jù)形式有誤。
    ??? 這個異常是在類裝入的鏈接階段的校驗過程中拋出。如果字節(jié)碼發(fā)生了更改,例如主版本號或次版本號發(fā)生了更改,那么二進制數(shù)據(jù)的形式就會有誤。例如,如果對字節(jié)碼故意做了更改,或者在通過網(wǎng)絡(luò)傳送類文件時現(xiàn)出了錯誤,那么就可能發(fā)生這個異常。
    ??? 修復(fù)這個問題的惟一方法就是獲得字節(jié)碼的正確副本,可能需要重新進行編譯。
    ExceptionInInitializerError
    根據(jù) JVM 規(guī)范,拋出 ExceptionInInitializer 的情況是:
    ??? * 如果初始化器突然完成,拋出一些異常 E,而且 E 的類不是 Error 或者它的某個子類,那么就會創(chuàng)建 ExceptionInInitializerError 類的一個新實例,并用 E 作為參數(shù),用這個實例代替 E。
    ??? * 如果 Java 虛擬機試圖創(chuàng)建類 ExceptionInInitializerError 的新實例,但是因為出現(xiàn) Out-Of-Memory-Error 而無法創(chuàng)建新實例,那么就拋出 OutOfMemoryError 對象作為代替。
    http://m.tkk7.com/zyl/archive/2007/02/04/97881.html

    posted on 2007-02-05 08:29 java_蟈蟈 閱讀(224) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 亚洲中文字幕一区精品自拍| 亚洲爆乳无码专区| 亚洲日韩一区二区一无码| 最近2019免费中文字幕6| 亚洲AV电影院在线观看| 国产成人精品一区二区三区免费| 亚洲色婷婷综合久久| a毛片免费在线观看| 亚洲狠狠色丁香婷婷综合| 色综合久久精品亚洲国产| 日本免费一二区在线电影| 久久亚洲中文无码咪咪爱| vvvv99日韩精品亚洲| 一个人免费观看视频在线中文| 久久精品国产亚洲精品| 十八禁在线观看视频播放免费| 亚洲av无码专区在线播放| 四虎最新永久免费视频| 亚洲熟女综合色一区二区三区 | 日本v片免费一区二区三区 | a级毛片在线视频免费观看| 亚洲av无码一区二区三区网站| 91大神免费观看| 亚洲AV无码无限在线观看不卡| 国产免费私拍一区二区三区 | 99精品热线在线观看免费视频| 亚洲国产精品一区| 免费毛片在线看片免费丝瓜视频| 国产精品亚洲精品爽爽| 亚洲精品一品区二品区三品区| 免费视频成人片在线观看| 亚洲一区二区三区91| 全亚洲最新黄色特级网站 | 亚洲日韩中文字幕天堂不卡| 在线观看免费宅男视频| 午夜成人无码福利免费视频| 亚洲av无码片在线播放| 成人免费a级毛片无码网站入口| 特级aaaaaaaaa毛片免费视频| 亚洲好看的理论片电影| 国产大片线上免费看|