Java:静态与内部类

这个问题在这里已经有了答案:

  • Java内部类和静态嵌套类23答案

  • 根据定义,内部类不能是静态的,所以我将重新将你的问题重新定义为“静态和非静态嵌套类之间有什么区别?”

    非静态嵌套类可以完全访问它所嵌套的类的成员。 静态嵌套类没有对嵌套实例的引用,所以静态嵌套类不能调用非静态方法,也不能访问嵌套类的实例的非静态字段。


    让我们来看看这些问题的智慧之源: Joshua Bloch的Effective Java

    从技术上讲,没有静态的内部类。 根据Effective Java ,正确的术语是一个静态嵌套类 。 非静态嵌套类实际上是一个内部类,以及匿名类和本地类。

    现在引用:

    非静态[嵌套]类的每个实例都与其包含类的封闭实例隐式关联...可以调用封闭实例上的方法。

    静态嵌套类不能访问封闭实例。 它也使用更少的空间。


    静态内部类和非静态内部类有两个区别。

  • 在声明成员字段和方法的情况下,非静态内部类不能有静态字段和方法。 但是,在静态内部类的情况下,可以有静态和非静态的字段和方法。

  • 非静态内部类的实例是通过外部对象的引用创建的,它已经定义了它,这意味着它包含了实例。 但是静态内部类的实例创建时没有Outer类的引用,这意味着它没有包含实例。

  • 看到这个例子

    class A
    {
        class B
        {
            // static int x; not allowed here
        }
    
        static class C
        {
            static int x; // allowed here
        }
    }
    
    class Test
    {
        public static void main(String… str)
        {
            A a = new A();
    
            // Non-Static Inner Class
            // Requires enclosing instance
            A.B obj1 = a.new B(); 
    
            // Static Inner Class
            // No need for reference of object to the outer class
            A.C obj2 = new A.C(); 
        }
    }
    
    链接地址: http://www.djcxy.com/p/16375.html

    上一篇: Java: Static vs inner class

    下一篇: Why can a static inner member class access the outer private constructor