欢迎来IT培训班!

咨询热线 18940085928

IT培训网 > 知识学习 > JAVA开发 >

Java匿名类,Java匿名内部类

授课机构:IT培训班

地址:北京

网报价格:详询

课程原价:

咨询热线:18940085928

课程详情 相关推荐 学校地址 网上报名

匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:

		
  1. new <类或接口>() {
  2. // 类的主体
  3. };
这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式:
  • 继承一个类,重写其方法。
  • 实现一个接口(可以是多个),实现其方法。
下面通过代码来说明。

		
  1. public class Out {
  2. void show() {
  3. System.out.println("调用 Out 类的 show() 方法");
  4. }
  5. }
  6. public class TestAnonymousInterClass {
  7. // 在这个方法中构造一个匿名内部类
  8. private void show() {
  9. Out anonyInter = new Out() {
  10. // 获取匿名内部类的实例
  11. void show() {
  12. System.out.println("调用匿名类中的 show() 方法");
  13. }
  14. };
  15. anonyInter.show();
  16. }
  17. public static void main(String[] args) {
  18. TestAnonymousInterClass test = new TestAnonymousInterClass();
  19. test.show();
  20. }
  21. }
程序的输出结果如下:
调用匿名类中的 show() 方法
从输出结果可以看出,匿名内部类有自己的实现。

提示:匿名内部类实现一个接口的方式与实现一个类的方式相同,这里不再赘述。

匿名类有如下特点:

1)匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。

		
  1. public static void main(String[] args) {
  2. int a = 10;
  3. final int b = 10;
  4. Out anonyInter = new Out() {
  5. void show() {
  6. // System.out.println("调用了匿名类的 show() 方法"+a); // 编译出错
  7. System.out.println("调用了匿名类的 show() 方法"+b); // 编译通过
  8. }
  9. };
  10. anonyInter.show();
  11. }

从 Java 8 开始添加了 Effectively final 功能,在 Java 8 及以后的版本中代码第 6 行不会出现编译错误,详情可点击《Java8新特性之Effectively final》进行学习。

2)匿名类中允许使用非静态代码块进行成员初始化操作。

		
  1. Out anonyInter = new Out() {
  2. int i; { // 非静态代码块
  3. i = 10; //成员初始化
  4. }
  5. public void show() {
  6. System.out.println("调用了匿名类的 show() 方法"+i);
  7. }
  8. };
3)匿名类的非静态代码块会在父类的构造方法之后被执行。
  • 学校名称:IT培训网

    固定电话:18940085928

    授课地址:线下 预约名额

报名信息