JAVA中内部类和匿名内部类的区别,分别在什么时候使用它们?
2015-12-13 17:36
806 查看
今天没事,抽出时间总结了一下很多开发人员都想弄明白的一些JAVA基础知识(内部类和匿名内部类)。
一、JAVA中内部类和匿名内部类的区别
内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用。
匿名内部类:它只能使用一次,不区分static和非static。如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样。
总结:可以用匿名内部类的地方都可以用内部类替换,但是用匿名内部类编码非常简洁,也容易读懂,除非你需要多次使用那个内部类,不然建议还是使用匿名内部类。
二、内部类的使用时机
1、实现事件监听器的时候(比方说actionListener 。。。采用内部类很容易实现);
2、编写事件驱动时(内部类的对象可以访问外部类的成员方法和变量,注意包括私有成员);
3、在能实现功能的情况下,为了节省编译后产生的字节码(内部类可以减少字节码文件,即java文件编译后的.class文件);
三、匿名内部类的使用时机
匿名内部类是内部类的一种特殊情况。它只有一个实例,而且没有引用。所以,一般在能用内部类实现,但是实例只用一次的情况下使用它(可以减少资源开销);
以上是本人通过几年的开发经验总结的。希望能对您一些JAVA初学者有所帮助。如果有什么不足或不对的地方,还请高手们指点。
一、JAVA中内部类和匿名内部类的区别
内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用。
匿名内部类:它只能使用一次,不区分static和非static。如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样。
总结:可以用匿名内部类的地方都可以用内部类替换,但是用匿名内部类编码非常简洁,也容易读懂,除非你需要多次使用那个内部类,不然建议还是使用匿名内部类。
二、内部类的使用时机
1、实现事件监听器的时候(比方说actionListener 。。。采用内部类很容易实现);
2、编写事件驱动时(内部类的对象可以访问外部类的成员方法和变量,注意包括私有成员);
3、在能实现功能的情况下,为了节省编译后产生的字节码(内部类可以减少字节码文件,即java文件编译后的.class文件);
三、匿名内部类的使用时机
匿名内部类是内部类的一种特殊情况。它只有一个实例,而且没有引用。所以,一般在能用内部类实现,但是实例只用一次的情况下使用它(可以减少资源开销);
以上是本人通过几年的开发经验总结的。希望能对您一些JAVA初学者有所帮助。如果有什么不足或不对的地方,还请高手们指点。
相关文章推荐
- JAVA中抽象类与接口的区别,分别在什么情况下使用它们
- spring4.0 源码分析 bean标签的解析(三)
- JAVA中接口存在的意义
- 浅谈Java中的equals和==
- Java 多线程(四)线程间的通信jdk1.5中Lock,Condition----各种锁的相关详细概念
- Java并发编程:如何创建线程?
- Java虚拟机(三)编译子系统
- Java并发编程:进程和线程之由来
- java对获取的字节数组进行处理
- 根据java的设计原则、设计模式实现了一个信息发送和接收的例子
- Spring AOP 详解
- SpringMVC中WebDataBinder的应用及原理
- java---之 反射
- Java Web 案例1 -- IO,JDBC
- JAVA wait(), notify(),sleep详解
- JAVA 解析excel兼容2003和2007以后的版本
- Eclipse代码提示开启
- java中线程的使用(未完)
- JAVA-责任链模式
- 各种排序算法的分析及java实现 - 残剑_ - 博客园