Java 创建 List 的时候直接赋值

示例代码

public class Test {

    private static List<String> list = new ArrayList<String>() { // 第一个花括号表示匿名内部类
        { // 第二花括号表示匿名内部类的构造代码块,可以有多个。构造代码块在构造函数前执行,匿名内部类的构造代码块在调用父类同参构造函数后执行
            this.add("A");
            this.add("B");
            add("C");
            add("D");
        }

        { // 匿名内部类的构造代码块
            this.add("E");
            add("F");
        }
    };

    public static void main(String[] args) {
        System.out.println(list);
    }
}

缺点

  1. 使用匿名内部类,会有效率上的损失。当然在大多数情况下,这点效率都是可接受的。
  2. 静态内部类持有所在外部类的引用。如果需要将 List 返回给到其他地方使用,可能造成内存泄漏。

等价于

public class MyList extends ArrayList {

    {
        this.add("A");
        this.add("B");
        add("C");
        add("D");
    }

}

public class Test {

    public static void main(String[] args) {
        System.out.println(new MyList());
    }
}

Java的四种代码块

用{}括起来的称为代码块:

  • 普通代码块:类中方法的方法体。
  • 构造代码块:类中{}直接括起来的语句,每次创建对象都会被调用,先于构造函数执行。
  • 静态代码块:类中static{}括起来的语句,只执行一次,先于构造代码块块执行。
  • 同步代码块:类中synchronized(){}括起来的语句,多线程环境下互斥执行。

替代方式

public class Test2 {

    private static List<String> list = new ArrayList<String>();

    static {
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
    }

    public static void main(String[] args) {
        System.out.println(list);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i余数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值