示例图一
示例图二
示例图三,把图一进行javap -c 反编译后的class文件,可以看出在34、42行对new了一个类文件并且还执行了其初始化方法。
JAVA双大括号语法原理
- 匿名内部类 + 初始非静态代码块。
- 第一个大括号是创建一个继承当前对象的匿名内部类。
- 第二个大括号是在这个匿 名内部类中创建一个非静态初始化代码块,最后new 的操作是得到当前对象的子类 (匿名内部类)然后向上转型为当前对象的引用。
缺陷
- 类中每一处双大括号的引用都会产生一个.class文件,导致堆内存会有这些文件的引用,增加类加载器负担。
- 使用双大括号初始化所创建的匿名内部类会持有当前对象的引用,会把当前对象的实例暴露出去,造出内存泄漏
- 最后虚心学习,共同进步 -_-