内部类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 }
注意点:
- 优先级:方法内部类 > 普通内部类/静态内部类 > 外部类。
相关推荐
在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法、匿名内部类不能是public、protected、private、static、只能创建匿名内部类的一个实例、匿名内部类不能定义任何静态成员、静态方法、一个匿名...
内部类是Java编程语言中的一种特性,它允许我们在一个类的内部定义另一个类。这种设计模式在Android开发中尤其常见,因为它可以有效地管理代码和实现特定的功能。本文将详细探讨内部类、匿名内部类以及内部接口的...
在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...
内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及方法参数内部类。 1. **成员内部类**:成员内部类就像是外部类的一个普通成员,可以是静态或非静态的。非静态内部类拥有对外部类的引用,可以直接...
Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...
内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。 成员内部类 成员内部类是定义在外部类的成员变量中的一种内部类。它可以访问外部类的所有成员变量和方法,包括私有的变量和方法。成员内部...
本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...
Java 基础第七章内部类与异常类 Java 语言支持在一个类中定义另一个类,这样的类称做内部类。内部类和外嵌类之间存在着紧密的关系:内部类可以访问外嵌类的成员变量和方法,而外嵌类也可以使用内部类声明的对象作为...
### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...
然而,不当使用Handler,尤其是结合匿名内部类或非静态内部类,可能导致内存泄漏和Native内存增加,这对应用性能和稳定性造成负面影响。 首先,我们要理解内存泄漏的概念。内存泄漏是指程序中已分配的内存没有被...
根据不同的应用场景和特性,内部类可以分为多种类型:成员内部类、局部内部类、静态内部类、匿名内部类。下面将详细介绍每种类型的内部类及其特点和使用方法。 #### 成员内部类 成员内部类(也称为非静态内部类)...
### 反射私有内部类的例子 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的功能,允许程序在运行时检查和修改自身结构与行为。通过反射,可以动态地获取类的信息并操作其字段、方法以及构造器等。...
Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
首先,内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像其他成员变量一样,可以直接访问外部类的所有成员,包括私有成员。局部内部类只存在于某个方法内,它的作用范围更小,...
内部类主要分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 1. 静态内部类(Static Inner Class) 静态内部类与普通的类类似,只是它们定义在外部类中,并且前面带有 `static` 关键字。它们不会...
Java 嵌套类和内部类详解 Java 中的嵌套类和内部类是指在一个类的内部定义另一个类,这种类称为嵌套类(nested classes)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,非静态嵌套类也即被称...
Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态嵌套类)、局部内部类和匿名内部类。 - **成员内部类**:这种类型的内部类是定义在外部类的一个成员位置上,它可以访问外部类...
内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...
### Java内部类(DOC)详解 #### 一、概述 Java内部类是Java语言中一个重要的概念,它指的是那些类定义被嵌套在其他类定义中的类。与之相对应的是顶层类,即那些类定义没有被嵌套在其他类中的类。内部类又可以...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...