java.lang.ExceptionInInitializerError的原因
生活随笔
收集整理的這篇文章主要介紹了
java.lang.ExceptionInInitializerError的原因
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自:http://blog.csdn.net/fykhlp/article/details/6236316
這個錯誤是說變量初始化出現問題,通常出現在靜態變量尤其是單例模式。這種問題往往是初始化順序不對造成的,下面舉個簡單的例子。
import java.util.HashMap; import java.util.Map; public class Example { private static Example example = new Example(); private static Map<Integer,Boolean> test = new HashMap<Integer, Boolean>(); private Example() { test.put(1, true); } public static Example getInstance() { return example; } }如果你在別的類調用getInstance,就會報錯ExceptionInInitializerError。這是因為類加載時不會為實例變量賦值,對象創建時不會為靜態變量賦值。我們調用getInstance時,此類就開始加載,加載的時候不會為實例變量賦值,但是會按順序給靜態變量賦值,所以先為example賦值,然后為test賦值即初始化。但為example賦值時出現了個小插曲,它會調用構造方法創建一個對象。對象創建時不會為靜態變量test賦值,而構造器內卻已經調用test,于是報錯了。
改為:
就可以了。
總結
以上是生活随笔為你收集整理的java.lang.ExceptionInInitializerError的原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让Eclipse启动时显示选择works
- 下一篇: oracle 数据导入 数据和备注(co