java.lang.NoClassDefFoundError錯誤

來源:互聯網
上載者:User

         應用程式跑的時候,突然報出來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之後,沒有異常就放手不管了。這種意識,是區分初級程式員和中級程式員的一個很明顯的標誌。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.