日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【译】NoClassDefFoundError和ClassNotFoundException的不同

發(fā)布時間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【译】NoClassDefFoundError和ClassNotFoundException的不同 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文翻譯自:Difference between NoClassDefFoundError vs ClassNotFoundExcepiton in Java


如果JVM或者ClassLoader在加載類時找不到對應的類,就會引發(fā)NoClassDefFoundError和ClassNotFoundException,這兩種錯誤都非常嚴重。由于不同的ClassLoader會從不同的地方加載類,有時是錯誤的CLASSPATH引發(fā)這類錯誤,有時是某個庫的jar包缺失引發(fā)這類錯誤。NoClassDefFoundError和ClassNotFoundException之間存在一些細微的不同點。

NoClassDefFoundError表示該類在編譯階段還可以找到,但是在運行Java應用的時候找不到了,有時靜態(tài)塊的初始化過程會導致NoClassDefFoundError。

另外一方面,ClassNotFoundException和編譯期沒什么關系,當你在程序運行時利用反射加載類時,就可能遇到ClassNotFoundException異常,例如加載SQL驅動時,對應的類加載器找不到驅動類。除了這些基本的不同,我們可以看看別的不同,以加深對NoClassDefFoundError和ClassNotFoundException的理解。

NoClassDefFoundError vs ClassNotFoundException

簡單來說,NoClassDefFoundError和ClassNotFoundException都是由于在CLASSPATH下找不到對應的類而引起的,通常是缺少對應的jar包,不過,JVM認為:(1)當應用運行時沒有找到對應的引用,則會拋出java.lang.NoClassDefFoundError;(2)當你在代碼中顯式加載類(使用Class.forName())時沒有找到對應的類,則會拋出java.lang.ClassNotFoundException。開發(fā)者經(jīng)常遇到的情況是:ClassNotFoundException異常引起了ClassNoDefFoundError。

  • NoClassDefFoundError是Error,是unchecked,因此也不需要使用try-catch或者finally語句塊包圍;另外,ClassNotFoundException是受檢異常(checked Exception),因此需要使用try-catch語句塊或者try-finally語句塊包圍,否則會導致編譯錯誤。

  • 如果你在J2EE開發(fā)中遇到NoClassDefFoundError,那么最有可能的原因就是存在多個類加載器和多個目標類,即我們常說的Jar包沖突——關于Jar包沖突,一般可以使用下面兩種方法解決:

    • 使用Maven Helper 這個插件,可以排除掉大部分jar包沖突;
    • 根據(jù)命令mvn dependency:tree -Dverbose -Dincludes=:logback-classic
  • 調(diào)用Class.forName()、ClassLoader.findSystemClass()和ClassLoader.loadClass()等方法時可能會引起java.lang.ClassNotFoundException

  • NoClassDefFoundError是鏈接錯誤,發(fā)生在鏈接階段,當解析引用的時候找不到對應的類,就會拋出java.lang.NoClassDefFoundError;ClassNotFoundException是異常,發(fā)生在運行階段。


    JVM類加載階段
  • 最后,這里有一頁非常好的PPT,總結了這兩種異常的不同點:


    nice slide of all differences between java.lang.NoClassDefFoundError and java.lang.ClassNotFoundException in Java
    • java.lang.ClassNotFoundException與java.lang.NoClassDefFoundError的區(qū)別 - xingoo - 博客園


    總結

    以上是生活随笔為你收集整理的【译】NoClassDefFoundError和ClassNotFoundException的不同的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。