Bho*_*oot 6 java syntax arraylist
最近,我偶然发现了以下java语法:
ArrayList<String> nodes = new ArrayList<String>(){{add("n1");add("n2");}};
Run Code Online (Sandbox Code Playgroud)
起初,我认为这是一个语法错误,但令我惊讶的是,代码没有给出编译或运行时错误.
我有以下问题:
请指出相关文献.
这将创建一个带有自定义初始值设定项的匿名类(请参阅初始化实例成员):
\n\n\n\n\n通常,您会在构造函数中放置代码来初始化实例变量。使用构造函数初始化实例变量有两种替代方法:初始化块和 Final 方法。\n 实例变量的初始化块看起来就像静态初始化块,但没有 static 关键字:
\n
{\n // whatever code is needed for initialization goes here\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当您想要一个已包含成员的列表时,这是很方便的,但在编译时会产生更多代码,因为匿名类实际上被编译为与 extends 不同的(全局)类ArrayList。
我最近读过这篇与此事相关的文章:
\n\n\n\n首先要注意的一点是Java运行时根本不理解内部类。无论内部类是命名的还是匿名的,都会使用烟雾和镜子过程将内部类转换为全局类。如果类有名称,那么编译器会生成名称格式为 [outer]$[inner] \xe2\x80\x94 $ 的类文件,$ 是 Java 中的合法标识符。对于内部类,生成的类文件只是简单地编号。因此,当编译本文开头的 Thread 示例时,我们最终会得到一个名为 Test$1.class 的类文件。数字“1”表示这是类 Test 中定义的第一个匿名类。
\n