简单谈谈java中匿名内部类构造函数-转自脚本之家
2016-04-06 23:19
351 查看
先看看下面的代码能不能编译通过:
?
答案是能通过编译,输出3个false。l1很容易理解,就是声明了一个
ArrayList对象,那么l2、l3是什么呢?
l2是一个匿名类内部类对象,继承ArrayList;
l3语句有些古怪,带了两个大括号,其实我们这样写就会明白了,这也是一个匿名内部类的定义,它的代码类似如下:
?
看到了吧,就是多了一个初始化代码块而已,起到构造函数的功能。当然一个类中的构造代码块可以有多个,下面的代码是可以编译的:
List l4 = new ArrayList(){{}{}{}};
匿名内部类虽然可以用一个初始化代码块来充当构造函数,但其构造函数还是进行了特殊的处理,它在初始化时直接调用父类的同参构造函数,然后在调用自己的代码块,例如:
?
等价于:
?
我们来看段示例代码
?
编译之后得到4个class文件:Test.class,InnerTest.class,InnerTest$1.class以及Main.class。容易看出来,Main.class是测试类的class文件,Test.class是超类Test的class文件,InnerTest.class是InnerTest 的class文件,最值得关注的就是匿名内部类的class文件InnerTest$1.class。
?
ArrayList对象,那么l2、l3是什么呢?
l2是一个匿名类内部类对象,继承ArrayList;
l3语句有些古怪,带了两个大括号,其实我们这样写就会明白了,这也是一个匿名内部类的定义,它的代码类似如下:
?
List l4 = new ArrayList(){{}{}{}};
匿名内部类虽然可以用一个初始化代码块来充当构造函数,但其构造函数还是进行了特殊的处理,它在初始化时直接调用父类的同参构造函数,然后在调用自己的代码块,例如:
?
?
?
相关文章推荐
- 多线程实现及Java Thread
- java 集合详解
- Java中继承与代码块综合
- 深入了解Struts2返回JSON数据的原理及具体应用范例
- Java RandomAccessFile用法 | Java基础
- java试题(HashMap 和 HashTable)
- java 内部类
- Struts2中$、#、%使用
- svn插件下载与eclipse集成
- Struts2的工作原理及工作流程
- springMVC基础注解
- Java native关键字
- myeclipse中SVN的配置
- AJAX+JAVA实现登录的实时验证
- Spring之JMS之发送消息
- Spring之JMS之接受消息
- 使用eclipse配置Dynamic Web Project动态web项目的一些总结
- Eclipse++Xdebug开发php环境配置
- 【java】foreach是如何实现的?
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?