1. 程式人生 > >java.lang.NoClassDefFoundError: Could not initialize class xxx 原因

java.lang.NoClassDefFoundError: Could not initialize class xxx 原因

一、問題及原因

程式裡有個工具類,主要是呼叫它的靜態方法來發送mq。

呼叫場景如下:

 

結果這兩天報了個錯:

java.lang.NoClassDefFoundError: Could not initialize class com.ceiec.rabbitmqservice.utils.MQMessageSender

 

後來大概看了下,這個類的class檔案是存在的。而且報的錯也不是class找不到之類的。

翻了下svn記錄,發現新增了一個static變數,這個變數的初始化會失敗。(因為spring配置檔案忘配置了)

把配置檔案改了就好了。

所以,這個問題原因就是static變數的初始化失敗導致。

這裡,也可以看出載入時機,因為在程式啟動過程是沒報錯的。是實際程式碼走到這個地方的時候,發現需要呼叫該類的靜態方法,但是呢

發現該類還沒有被載入,於是進行載入、初始化等。

 

二、參考資料

JVM類生命週期概述:載入時機與載入過程