What good are static classes in Java?
我读过,我可以定义一个类为
类的
非静态嵌套类(也称为内部类)和静态嵌套类之间的区别在于,第一个类的对象总是有一个对应的"外部"对象,而后一个类的对象则没有(它们只有私有级别的访问权限,并且在命名空间中)。
这里有一个例子:
1 2 3 4 | class Outer { static class StaticNested {} class Inner {} } |
现在我们可以创建如下对象:
1 2 3 | Outer o = new Outer(); Outer.StaticNested sn = new Outer.StaticNested(); Outer.Inner i = o.new Inner(); |
从
您可以这样将内部类定义为静态类(为了彻底了解,该类将成为静态嵌套类):
1 2 3 | class A { public static class Inner { } } |
这意味着类
如果你是一个Java初学者,我建议你不要浪费太多的时间去寻找一些有用的应用程序。请记住,这种可能性存在,并且当您将更好地理解面向对象编程一般和Java,特别是,您将再次出现在这里。
需要注意的是,只有内部类可以被定义为静态类,而"普通"类不能。
来自Sun认证程序员的Java 6学习指南:
A static nested class is simply a class that's a static member of the enclosing class.... The class itself isn't really"static"; there's no such thing as a static class. The
static modifier in this case says that the nested class is a static member of the outer class. That means it can be accessed, as with other static members, without having an instance of the outer class.
显而易见的下一个问题是"
以下是我在学校时记得的一个例子:
1 2 3 4 5 6 7 8 | public class Shapes { List<Shape> shapes; private static class ShapeSorter implements Comparator { ... } ... |
请注意,不能有顶级静态类;它没有可作为成员的封闭类。由于范围问题,也不能在方法内部声明静态类。
关于Java中静态的意思,堆栈溢出有几百个其他问题。以下是一些可以让你去的地方:
- 什么是"静态"?
- 为什么你不能在Java中声明一个类作为静态?
- JAVA:静态类?
- Java中的静态嵌套类,为什么?