双花括号的帅气与弊端

1.我们使用map.put();时换另一种写法:

HashMap<String, Object> hashMap3 = new HashMap<String, Object>() {{
            put("ARK_OOP",7);
            put("CTR_URL",8);
            put("LPK_NNM",9);
        }};

        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(){{
            add(hashMap1);
            add(hashMap2);
            add(hashMap3);
        }};

为什么可以这样写?:

public class Test {
 /*private static HashMap< String, String> map = new HashMap< String, String>() {
  {
   put("Name", "June");
   put("QQ", "2572073701");
  }
 };*/
 public Test() {
  System.out.println("Constructor called:构造器被调用");
 }
 static {
  System.out.println("Static block called:静态块被调用");
 }
 {
  System.out.println("Instance initializer called:实例初始化块被调用");
 }
 public static void main(String[] args) {
  new Test();
  System.out.println("=======================");
  new Test();
 }
}

输出:

Static block called:静态块被调用
 Instance initializer called:实例初始化被调用
 Constructor called:构造器被调用
 =======================
 Instance initializer called:实例初始化被调用
 Constructor called:构造器被调用

即new HashMap(){  //匿名类

{//TODO}      //实例初始化块

}

参考:new HashMap(){{put("id", "001");}}的解释_只作为个人备忘录-CSDN博客

------


2021/10/11更新:

4. 使用双花括号初始化的优点

使用双花括号有一些简单的优点:

  • 与本地创建和初始化方式相比,代码行更少
  • 代码更具可读性
  • 创建初始化在同一表达式中完成

5. 使用双花括号初始化的缺点

使用双花括号的缺点:

  • 模糊,不是广为人知的初始化方式
  • 每次我们使用它时都会创建一个额外的类

以及网上的生成一千万个对象或者集合啥的效率问题,我测了下,都是骗子。

还有说引用导致内存泄漏的,篇幅一模一样,我是蚌埠住了。看我的另一篇:

匿名内部类引用外部类对象是可以的且并不一定需要final及内部类引用外部类为私有时编译器会为其开“后门”_cc1aymore的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值