Java之NoClassDefFoundError的原因及分析
ClassNotfoundException
java開發(fā)中經(jīng)常遇到j(luò)ava.lang.ClassNotfoundException異常,ClassNotfoundException異常一般就是編譯時找不到類,Console臺就會輸出異常信息。
一般情況下,我們都會rebuild或者clean一下工程,讓項目重新編譯一遍。
兩個異常的區(qū)別
不過一遇到NoClassDefFoundError,我們有時也容易和ClassNotfoundException異?;煜?/p>
雖然NoClassDefFoundError和ClassNotfoundException異常出現(xiàn)原因類似,都是因為編譯加載不到類導(dǎo)致的,但是卻有本質(zhì)的區(qū)別。
兩者的本質(zhì)區(qū)別就是:
- ClassNotfoundException時在編譯時JVM加載不到類或者找不到類導(dǎo)致的;
- 而NoClassDefError是在運行時JVM加載不到類或者找不到類
NoClassDefFoundError錯誤發(fā)生原因
為什么會發(fā)生NoClassDefFoundError錯誤?
其實就是和Java虛擬機的工作原理有關(guān)了,下面簡單介紹一下JVM的類加載機制
類加載器三個機制:委托、單一性、可見性
- 委托:指加載一個類的請求交給父類加載器,若父類加載器不可以找到或者加載到,再加載這個類
- 單一性:指子類加載器不會再次加載父類加載器已經(jīng)加載過的類
- 可見性:子類加載器可以看見父類加載器加載的所有類,而父類加載器不可以看到子類加載器加載的類
JVM的類加載機制的委托行機制,決定了類加載器只加載一次,子類加載器不會再加載父類加載器已經(jīng)加載過的類
所有在一些特定條件下就會出現(xiàn)編譯時可以加載到類,運行時不可以加載到類,這時候就會出現(xiàn)java.lang.NoClassDefFoundError異常
NoClassDefFoundError可能出現(xiàn)的情況
目前有發(fā)現(xiàn)幾種情況:
1、一種情況就是因為靜態(tài)變量加載不到原因
2、工程里沒有將jar添加到classpath,maven項目的,需要根據(jù)項目情況排查
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)在線預(yù)覽的示例代碼(openOffice實現(xiàn))
本篇文章主要介紹了Java實現(xiàn)在線預(yù)覽的示例代碼(openOffice實現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11SpringBoot如何解析應(yīng)用參數(shù)args
文章主要介紹了SpringBoot啟動過程中如何解析`main`函數(shù)中的參數(shù)`args`,包括如何解析命令行參數(shù)、訪問選項參數(shù)和非選項參數(shù),接著,介紹了`ApplicationArguments`接口及其方法,感興趣的朋友跟隨小編一起看看吧2024-11-11Spring Cloud-Feign服務(wù)調(diào)用的問題及處理方法
Feign 是一個聲明式的 REST 客戶端,它用了基于接口的注解方式,很方便實現(xiàn)客戶端配置。接下來通過本文給大家介紹Spring Cloud-Feign服務(wù)調(diào)用,需要的朋友可以參考下2021-10-10Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實
ResponseBodyAdvice?是 Spring MVC 提供的一個強大接口,允許你在響應(yīng)體被寫入 HTTP 響應(yīng)之前對其進行全局處理,下面我將全面介紹它的工作原理、使用場景和最佳實踐,感興趣的朋友一起看看吧2025-04-04IntelliJ?IDEA軟件內(nèi)如何實現(xiàn)更新到最新版本
文章介紹了如何在IntelliJIDEA中更新到最新版本以及如何回到之前忽略的版本,解決辦法是通過選擇"IgnoreThisUpdate"來跳過舊版本,重復(fù)操作即可更新到最新版本2024-12-12spring boot 項目利用Jenkins實現(xiàn)自動化部署的教程詳解
這篇文章主要介紹了spring boot 項目利用Jenkins實現(xiàn)自動化部署的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07Elasticsearch算分優(yōu)化方案之rescore_query示例詳解
這篇文章主要為大家介紹了Elasticsearch算分優(yōu)化方案之rescore_query示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08