java很有意思的问题

hgfgoodcreate 发布于 2016/05/08 20:54
阅读 518
收藏 0
public static Map m = new HashMap(){{
		m.put("a", "3");
	}};

上述代码为什么有两个{{}},

如果同是在一个class中,在定义成员变量的时候,使用上面这个方式和下面的这个 方式区别在哪里?

        public static Map m = new HashMap();
        static{
		m.put("a", "3");
	};



谢谢!

希望有大牛能解答~




加载中
0
逝水fox
逝水fox
请搜索 “匿名内部类” 和 “实例块”两个关键字阅读
hgfgoodcreate
hgfgoodcreate
懂了,谢谢~
0
景愿
景愿
第一个代码中的m要换成this把。。。
hgfgoodcreate
hgfgoodcreate
慧眼~
0
阿信sxq
阿信sxq

第一段代码的写法好神奇


0
蓝水晶飞机
蓝水晶飞机
static关键字都出现了,此时已不是成员变量!应该称作‘类变量’。
0
木木我不是王子
木木我不是王子
确定第一种方法不会报错抛空指针?
木木我不是王子
木木我不是王子
回复 @hgfgoodcreate : 分析的很有道理
hgfgoodcreate
hgfgoodcreate
如果直接在main方法里面使用m(他是static的),那么会报ExceptionInitError,因为这个m是这个匿名内部类的实例,在类加载的过程中,由于第一段代码是静态的,加载的时候会往m里面put数据,但是匿名内部类还没有初始化完成,没初始化完成就使用,就会出现ExceptionInitError
返回顶部
顶部