为什么要创建静态嵌套类的实例?

时间:2019-01-11 06:44:11

标签: java class nested

据我所知,通常在Java中,静态内容意味着您无法创建它的实例。但是如果是这样,为什么您要创建一个静态嵌套类的实例?难道这不会破坏静态事物的目的吗?

3 个答案:

答案 0 :(得分:2)

  

据我所知,通常在Java中,静态内容意味着您无法创建它的实例。

那是不对的。 static“不属于任何特定实例,而是属于类型/类本身”。

在封闭类的上下文中考虑静态类。静态类是static成员,这意味着嵌套类未绑定到封闭类的任何特定实例。
这样做的含义是,您可以创建嵌套类的实例,而不必先创建外部类的实例。

答案 1 :(得分:0)

  

某些静态内容意味着您无法创建它的实例。

那不是事实。您不仅不能创建静态字段的实例,也不能创建非静态字段的实例,因为它是一个 field 而不是一个类。

static仅意味着您不需要创建周围类的实例来访问它。 static个成员属于该类本身,而不是该类的实例。

有了这个定义,静态类就很有意义了。

可以创建静态类的实例,而无需创建其外部类的实例:

class Outer {
    static class Inner {}
}

Outer.Inner obj = new Outer.Inner(); // no Outer instances created!

非静态内部类的实例不能:

class Inner {
    class Outer {

    }
}

Inner inner = new Inner(); // I have to create this instance, otherwise it wouldn't compile
Inner.Outer outer = inner.new Outer();

答案 2 :(得分:0)

想象一下这样一种情况,您在嵌套的静态类中有一个方法,而您想调用该方法。

请参考以下代码段:

class OuterClass 
{  

    // static nested class 
    static class StaticNestedClass 
    { 
        void display() 
        { 
            System.out.println("Static Nested Class Display Method");
        } 
    } 

    static void display()
    {
        System.out.println("Outer Class Display Method");
    }

    public static void main(String[] args) 
    { 
        // accessing a static nested class 
        OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 

        nestedObject.display(); // This calls the display() method of the static nested class
        OuterClass.display(); // This calls the display() method of outer class

    } 
} 

如何在不创建静态嵌套类的对象的情况下访问它的display()。 Java允许创建静态嵌套类的实例,以便我们可以访问该类中定义的方法。

希望有帮助!!!