Java中的静态类有什么用?

时间:2011-03-09 21:25:44

标签: java class static

我已经读过我可以将类定义为static,但我不明白为什么我可能需要这样做。静态类有什么用?我什么时候需要使用它们?我会很感激的例子。

3 个答案:

答案 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();

oi的对应外部对象,而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中的静态含义。以下是一些让你前进的方法: