代码示例:
package org.example;
import java.util.HashMap;
import java.util.Map;
public class MyJavaTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>(){{
put("string", "string");
}};
}
}
编译后会多了一个MyJavaTest$1.class
MyJavaTest$1.class拉到idea打开
可以看到{{ put(“string”, “string”);}}相当于定义了一个内部类,在内部类得构造方法里进行了调用!!!
假如我们javap -v MyJavaTest.class, 发现
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=2, args_size=1
0: new #2 // class org/example/MyJavaTest$1
3: dup
4: invokespecial #3 // Method org/example/MyJavaTest$1."<init>":()V
7: astore_1
8: return
发现new了MyJavaTest$1,并执行了其构造方法