您的位置:首页 > 编程语言 > Java开发

java ExceptionInInitializerError 实际遇到的问题

2014-09-09 23:02 816 查看
这个问题通常是静态变量初始化顺序出了问题,通常出现在单例模式中.

code:

import java.util.HashMap;
import java.util.Map;

public class Tom {

	private static Tom tom = new Tom();
	private static Map<Integer,Boolean> test = 
			new HashMap<Integer, Boolean>();
	private Tom()
	{
		test.put(1, true);
	}
	
	public static Tom getInstance()
	{
		return tom;
	}
	public static void main(String[] args){
		getInstance();
	}
}


输出:

Exception in thread "main" java.lang.ExceptionInInitializerError

Caused by: java.lang.NullPointerException

at Tom.<init>(Tom.java:12)

at Tom.<clinit>(Tom.java:7)

getInstance()被调用,类被加载,静态变量被初始化,然而在变量tom初始化的时候,构造方法被调用,对象创建的时候不会给静态的test初始化,结果test没有被初始化,

构造器中就直接使用了test.

换个顺序就可以了:

import java.util.HashMap;
import java.util.Map;

public class Tom {
	
	private static Map<Integer,Boolean> test = 
			new HashMap<Integer, Boolean>();
	private static Tom tom = new Tom();
	private Tom()
	{
		test.put(1, true);
	}
	public static Tom getInstance()
	{
		return tom;
	}
	public static void main(String[] args){
		getInstance();
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐