我已经读过我可以将类定义为static
,但我不明白为什么我可能需要这样做。静态类有什么用?我什么时候需要使用它们?我会很感激的例子。
答案 0 :(得分:5)
类的static
关键字仅允许嵌套类,在另一个类中。
非静态嵌套类(也称为内部类)和静态嵌套类之间的区别在于,第一个对象的对象始终具有对应的“外部”对象,而后者的对象则不具有(它们仅具有私有对象)级访问,并在命名空间内。)
这是一个例子:
class Outer {
static class StaticNested {}
class Inner {}
}
现在我们可以创建如下对象:
Outer o = new Outer();
Outer.StaticNested sn = new Outer.StaticNested();
Outer.Inner i = o.new Inner();
o
是i
的对应外部对象,而sn
没有这样的元素。 (通常你会从外部对象的方法创建内部类的对象,你可以简单地编写new Inner()
并将this
作为外部对象。)
从Inner
之外我们无法获得相应的外部对象,但在其中我们可以编写Outer.this
来引用外部对象。如果需要,这可以在多个级别上工作。
答案 1 :(得分:4)
你可以像这样定义一个inner class为静态(为了彻底,该类将成为一个静态嵌套类):
class A {
public static class Inner { }
}
这意味着类Inner
以某种方式与A
相关,但未附加到特定实例。它主要是在两者之间建立某种关系的一种方式。
如果您是Java初学者,我建议您不要浪费太多时间来为此找到一些有用的应用程序。请记住,存在这种可能性,当您对面向对象编程以及特别是Java有更好的理解时,您将再次遇到这种情况。
重要的是要注意,只有内部类可以定义为静态,“普通”类不能。
答案 2 :(得分:0)
来自 Sun认证的Java 6学习指南程序员:
静态嵌套类只是一个类,它是封闭类的静态成员 ....类本身并不是真正的“静态”;没有静态类这样的东西。在这种情况下,
static
修饰符表示嵌套类是外部类的静态成员。这意味着可以像其他静态成员一样访问,而无需外部类的实例。
明显的下一个问题是“static
是什么意思?”所有这意味着你每个类得到一个而不是每个对象一个。换句话说,每个人都共享一个版本,而不是绑定到任何特定实例,而不是每个类的实例。这一点听起来很明显,但是在你想要使用静态成员并且你也想要使用类的情况下,你应该使用静态类。静态类有时也可以作为小帮助方法的容器,因为它们可以访问它们的封闭类的私有成员。
这是我在学校记得的一个例子:
public class Shapes {
List<Shape> shapes;
private static class ShapeSorter implements Comparator {
...
}
...
请注意,您不能拥有顶级静态类;它没有封闭的类成为它的成员。由于范围问题,你也不能在方法中声明一个静态类。
仅有关于Stack Overflow的其他问题的数百个关于Java中的静态含义。以下是一些让你前进的方法: