在Java编程中,匿名内部类和代码块的组合往往使代码简洁高效,但初学者可能难以理解其本质。本文将详细分析示例代码,揭示其背后的机制。
让我们先来看看这个代码:
public static void main(String[] args) { List<String> list = new ArrayList<String>() {{ add("A"); add("B"); add("C"); }}; System.out.println(list); }
乍一看,new ArrayList
1. 匿名内部类别:隐形继承
立即学习“Java免费学习笔记(深入);
new ArrayList
2. 实例初始化块:对象的即时初始化
紧随其后的{{ ... }} 它是一个例子初始化块。它不同于结构器。例子初始化块在创建对象之前执行。在这里,它用于直接向新创建的ArrayList对象添加元素 "A"、"B" 和 "C"。
因此,该代码等同于:
public static void main(String[] args) { List<String> list = new MyArrayList(); // MyArrayList 是继承自 ArrayList 的匿名类 System.out.println(list); } class MyArrayList extends ArrayList<String> { { // 实例初始化块 add("A"); add("B"); add("C"); } }
MyArrayList 这一类是隐藏的,我们不需要明确定义它。例如,初始化块负责在创建对象的同时完成初始化。
Java版本差异:钻石运算符的应用
需要注意的是,在Java 7和之前的版本,这个代码需要写成 new ArrayList
综上所述,该代码采用匿名内部类和实例初始化块,在创建ArayList对象的同时完成初始化,使代码更加紧凑,提高可读性。 当需要快速创建和初始化对象时,这种技能是非常实用的。
Java语法中匿名内部类和代码块的使用方法是什么?详情请关注图灵教育的其他相关文章!
