当前位置:   article > 正文

Java 创建 List 的时候直接赋值_list直接赋值

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

缺点

  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());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/77374
推荐阅读
相关标签
  

闽ICP备14008679号