Java 中的四种嵌套类:嵌套静态类、成员类、本地类和匿名类
2005-09-29 13:21
295 查看
嵌套静态类是任何一个在另外一个类或者接口的代码体中声明的类,它作为外嵌类或者接口的静态成员。嵌套静态类的行为类似于顶级类,唯一的差别是嵌套静态类前除了有 Java 包的名字以外还有外嵌类的名字。嵌套静态类是静态成员,因此没有 this 指针指向外嵌类的实例,也就是说嵌套静态类不能访问外嵌类的实例数据。当一个重要的数据结构紧密的关联与外嵌类,并且该数据结构有足够的内容保证它能够拥有一个类的时候,一般情况下我们可以使用嵌套静态类。在 java.lang.String 中我们可以看到:
public class String {
private static class CaseInsensitiveComparator implements Comparator, java.io.Serializable {
//…
}
}
代码中所示的嵌套静态类用于进行大小写无关的比较,Comparator 接口是 java.util 包中的一部分,通过把这个类嵌入到 String 中,我们就可以把这个类和 String 紧密的关联起来。
内部类有三种形式:成员类、本地类和匿名类,每个类依次都是对它前一个类的改进。内部类的可视范围是它的直接外嵌类(这一点和嵌套静态类不同,嵌套类在其外嵌类之外也是可视的),也就是说内部类可以直接引用外嵌类中的任何成员。因为内部类与外嵌类的实例相关,所以内部类拥有两个 this 指针,一个指向内部类的实例本身,一个指向外嵌类实例。内部类的一个主要用途是用于 GUI 的事件处理程序。
成员类很像嵌套静态类,只是不带 static 关键字。java.awt.ScrollPane 中有如下代码:
public class ScrollPane extends Container implements Accessible {
// …
class PeerFixer implements AdjustmentListener, java.io.Serializable {
//…
}
}
本地类是在代码块中声明的,因此它不是外嵌类的成员。一般来说,本地类在方法中进行声明。成员类和本地类的差别很小,通过把本地类移到方法的外部,我们可以很容易得把它转换成为成员类。它们两个之间最重要的差别是,本地类只能访问 final 的变量或者参数。
匿名类允许我们把类的定义和实例的分配组合在一起。无须象其它任何嵌套类那样进行声明,我们可以直接用 new SomeClass() 实例化对象,并且在实例化的位置把整个类的实现都放在花括号中。
public class String {
private static class CaseInsensitiveComparator implements Comparator, java.io.Serializable {
//…
}
}
代码中所示的嵌套静态类用于进行大小写无关的比较,Comparator 接口是 java.util 包中的一部分,通过把这个类嵌入到 String 中,我们就可以把这个类和 String 紧密的关联起来。
内部类有三种形式:成员类、本地类和匿名类,每个类依次都是对它前一个类的改进。内部类的可视范围是它的直接外嵌类(这一点和嵌套静态类不同,嵌套类在其外嵌类之外也是可视的),也就是说内部类可以直接引用外嵌类中的任何成员。因为内部类与外嵌类的实例相关,所以内部类拥有两个 this 指针,一个指向内部类的实例本身,一个指向外嵌类实例。内部类的一个主要用途是用于 GUI 的事件处理程序。
成员类很像嵌套静态类,只是不带 static 关键字。java.awt.ScrollPane 中有如下代码:
public class ScrollPane extends Container implements Accessible {
// …
class PeerFixer implements AdjustmentListener, java.io.Serializable {
//…
}
}
本地类是在代码块中声明的,因此它不是外嵌类的成员。一般来说,本地类在方法中进行声明。成员类和本地类的差别很小,通过把本地类移到方法的外部,我们可以很容易得把它转换成为成员类。它们两个之间最重要的差别是,本地类只能访问 final 的变量或者参数。
匿名类允许我们把类的定义和实例的分配组合在一起。无须象其它任何嵌套类那样进行声明,我们可以直接用 new SomeClass() 实例化对象,并且在实例化的位置把整个类的实现都放在花括号中。
相关文章推荐
- Java中成员类、嵌套类和匿名类
- Java嵌套类(nested class)----静态成员类、非静态成员类、匿名类和局部类
- JAVA监听器添加的四种方式(自身、外部类、内部类、匿名类)
- Java 内部类(分四种:成员内部类、局部内部类、静态内部类和匿名内部类)
- Java中等号赋值的测试,包括嵌套List和嵌套类
- 深入理解java嵌套类和内部类、匿名类
- java中的静态类和嵌套类
- 深入理解java嵌套类和内部类、匿名类
- JAVA--成员内部类 局部内部类 匿名类
- java中的变量(成员变量、本地变量、类变量)
- java中的变量(成员变量、本地变量、类变量)
- Java的特殊类用法:文件类、内部类、本地类、匿名类
- Java 嵌套类(Nested Class):静态嵌套类,内部类,局部类,匿名类
- [转]《Java Generics and Collections》读书笔记四:构造函数,静态成员,嵌套类
- JAVA监听器添加的四种方式(自身、外部类、内部类、匿名类)
- Java中类的成员访问的四种控制方式总结
- Java 内部类、成员类、局部类、匿名类等
- java中的变量(成员变量、本地变量、类变量)
- Java的特殊类用法:文件类、内部类、本地类、匿名类
- java四种嵌套类的使用环境