为了账号安全,请及时绑定邮箱和手机立即绑定

Java 在集合初始化时赋值

Java 在集合初始化时赋值

忽然笑 2019-03-20 17:14:56
List<String> list = new ArrayList<String>(){            {                add("hello");                remove(0);            }        };map = new HashMap<String, Object>(){            {                put("name","123");            }        };请问这个语法是来自 Java 几?他的原理又是什么?一个大括号我知道是匿名内部类,但是里面的大括号不知道是什么意思??
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

这种语法叫做Java的动态初始化块。


它是包含在某个类里面一个大括号中的代码片段,在类实例化时自动调用。


例如:


class Person {

    {System.out.print(123);}

}

那么在调用new Person()时就会打印出123。


至于你问题中的代码,只不过那个动态初始化块放到了一个匿名类中,所以看起来有点奇怪、不太好理解。但是,毕竟匿名类也是类啊,所以是合法的。结果就是在那个匿名类被实例化的时候,那段代码执行了,集合中放进去了几个元素,相当于初始化了集合。


至于从Java哪个版本开始支持的,我没有查记不清了,但是估计很早就支持了,只是从Java 5就应该支持了。


最后说一句,用这种方式初始化集合,看起来像黑魔法。


另外,还可以去查一下静态初始化块,比较一下它们的区别。


查看完整回答
反对 回复 2019-04-20
?
aluckdog

TA贡献1847条经验 获得超7个赞

里面的大括号是初始化块,会在new时构造器调用之间执行


查看完整回答
反对 回复 2019-04-20
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

大括号里不是匿名内部类,而是构造代码块,貌似在构造方法之前执行的(记得不是很清楚了),我把它看成和构造方法一样的东东。


查看完整回答
反对 回复 2019-04-20
  • 3 回答
  • 0 关注
  • 2448 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号