java.lang.NoClassDefFoundError錯誤


         應用程序跑的時候,突然報出來Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.xxx.xxx.XXX錯誤,當時第一反應就是.NoClassDefFoundError,肯定是類找不到了。於是趕緊看看代碼,發現使用類的調用處沒有任何的編譯錯誤,這樣的話就很迷惑了,為什么會NoClassDefFoundError錯誤呢。重新編譯檢查了一遍之后,還是報出來同樣的錯誤,於是后面的錯誤信息引起了注意【Could not initialize】。

 

           不能初始化,也就是類在new的時候出現了問題,於是仔細檢查了一下不能初始化的類,發現是個靜態工具類,根本就沒有什么構造函數,那么沒有構造函數何來的初始化異常?於是仔細的檢查了一下代碼之后,發現異常可能出現在這個地方了。

 static { 
        InputStream in =  XXX.class.getResourceAsStream("/conf/abc.properties"); 
        try {
            prop.load(in);  
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
     } 

   關鍵就在第一行的 InputStream in = XXX.class.getResourceAsStream("/conf/abc.properties");,如果沒有abc.properties的話,肯定會出現異常,這樣的話就會造成了初始化錯誤。當然比較奇怪的時候,既然try了,為什么不把第一行的代碼也放到try里面,這樣的話,即使有錯誤,也會能夠順利的進行初始化操作。

    現在的解決辦法兩步,第一步增加abc.properties,關鍵是第二步,把所有的代碼放到try里面去。第二步的關鍵在於業務的整體要求和設計的整體要求,到底放不放在里面是需要整體綜合考慮的,但是前提是,需要有這個意識,而不是簡簡單單的增加一個abc.properties之后,沒有異常就放手不管了。這種意識,是區分初級程序員和中級程序員的一個很明顯的標志。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM