java用双大括构造方式进行号初始化赋值操作

看到了一段奇怪的初始化ArrayList并赋值的代码,类似于

ArrayList<String> list = new ArrayList<String>(){{
	add("a");
	add("b");
	add("c");
}};
System.out.println(list);

就会输出[a, b, c]

我是第一次注意到有用 {{}} 的情形,不能理解,开始以为是黑科技,百度了一下发现原来如此。

如果是 new ArrayList<String>(){} 的形式,就是常见的匿名类。

现在两个大括号的写法,等于是在匿名类里加了一段代码块

new ArrayList<String>(){{}}

这一段代码会编译出一个带$名的class,其实约等于下面的

static class ListTemp extends ArrayList{
    public ListTemp(){
        super();
    }
    {
        this.add("123");
    }
}
...
System.out.println(new ListTemp());
执行结果一样会输出123

创建对象时先执行构造方法,再执行代码块里的内容。

写起来很省事,但用的多了会编译出很多带$的class文件。

详细解释可见这篇文章

https://blog.csdn.net/qq_37855749/article/details/115913722

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值