内部类class文件命名规则
- 普通内部类、静态内部类:<Outer>$<Inner>.class,其中<Outer>为外部类类名,<Inner>为内部类类名。
- 方法内部类:<Outer>$<number><Inner>.class,其中<Outer>为外部类类名,<Inner>为内部类类名,<number>为在外部类中定义的第number个Inner内部类。因为每个外部类(比如Outer)方法都能够定义一个名字相同的内部类(比如Inner),则命名这些名字相同的内部类的方法为:Outer$1Inner.class、Outer$2Inner.class。
- 匿名内部类:<Outer>$<number>.class,其中<Outer>为外部类类名,<number>为第number个匿名内部类,因为匿名内部类没有类名,因此只能用编号代替。
普通内部类
语法注意点:
- 在普通内部类中不允许定义任何的静态成员,否则Compile Error。
1 public class InnerClass01 2 { 3 public static void main(String[] args) { 4 Outer out = new Outer(); 5 Outer.Inner inn = out.new Inner(); //创建内部类实例之前,必须创建外部类实例 6 inn.print(); 7 } 8 } 9 class Outer 10 { 11 private int a = 1; 12 class Inner 13 { 14 public void print() 15 { 16 System.out.println("Inner " + a); //内部类能够访问外部类的私有实例变量 17 } 18 } 19 }
上面的代码中:
- 第12~18行:定义了内部类,声明方法和定义普通类类似。
- 第16行:内部类能够访问外部类的私有实例变量。
- 第4~6行:实例化内部类之前必须要有一个外部类的对象,内部类的类型是:<Outer>.<Inner>。
静态内部类
1 public class InnerClass04 2 { 3 public static void main(String[] args) { 4 Outer.Inner inn = new Outer.Inner(); 5 inn.fun(); 6 } 7 } 8 class Outer 9 { 10 static class Inner 11 { 12 public void fun() 13 { 14 System.out.println("hello"); 15 } 16 } 17 }
注意点:
- 第4行:创建静态内部类的对象的方法:<Outer>.<Inner> in = new <Outer>.<Inner>();
- 静态内部类其实不像内部类,因为不需要创建外部类实例就能创建内部类实例。
匿名内部类
1 public class InnerClass03 2 { 3 public static void main(String[] args) { 4 Outer out = new Outer(); 5 out.addListener(new ClickListener(){ //匿名内部类,命名为:InnerClass03$1.class 6 public void onClick() 7 { 8 9 } 10 }); 11 } 12 } 13 class Outer 14 { 15 public void addListener(ClickListener listener) 16 { 17 18 } 19 } 20 interface ClickListener 21 { 22 public void onClick(); 23 }
在监听器、触发器的使用中经常用到,上面是一个典型的匿名内部类的使用方法,这个匿名内部类是实现ClickListener接口的子类。
方法内部类
在方法内部定义内部类,一般不太用到。
注意点:
- 方法内部类不能使用方法的局部变量,因为内部类实例的生命周期可能比方法的局部变量长。
- 方法内部类可以和普通内部类一样,方法外部类的实例变量。
- 如果要创建方法内部类的实例,则必须在方法内部类声明后才能定义。
内部类的优先级
下面代码输出:内部类。
1 class Inner //第一个Inner类 2 { 3 public void print() 4 { 5 System.out.println("外部类"); 6 } 7 } 8 public class InnerClass05 9 { 10 class Inner //第二个Inner类 11 { 12 public void print() 13 { 14 System.out.println("内部类"); 15 } 16 } 17 public void fun() 18 { 19 Inner in = new Inner(); 20 in.print(); //输出 “内部类” 21 class Inner //第三个Inner类 22 { 23 public void print() 24 { 25 System.out.println("方法内部类"); 26 } 27 } 28 } 29 public static void main(String[] args) { 30 InnerClass05 inclass = new InnerClass05(); 31 inclass.fun(); 32 } 33 }
注意点:
- 优先级:方法内部类 > 普通内部类/静态内部类 > 外部类。
相关推荐
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
1.接口-简介 2.接口-作用 3.接口-定义方式 4.接口-实现 5.接口-与抽象类之区别 6.接口-应用示例(设计模式...内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...
内部类分类
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范
Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类
相关android开发中内部类 匿名内部类 内部接口 对比说明
实验报告8++内部类与异常类
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类
成员内部类、局部内部类、静态内部类、匿名内部类
主要讲述了JAVA中内部类和匿名内部类的相关问题。
java基础第七章内部类与异常类.doc
java的内部类
反射私有内部类的例子 反射私有内部类的例子反射私有内部类的例子
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
java内部类详解
java 利用反射获取内部类静态成员变量的值操作.docx
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现...
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。