代码之家  ›  专栏  ›  技术社区  ›  Mr.C

为什么静态嵌套类看起来有实例字段?

  •  -2
  • Mr.C  · 技术社区  · 7 年前

    请考虑Java 8中的以下代码:

    class OuterClass {
    
        static class MyStaticClass {
    
            static int staticInt = 5;
            int instanceInt = 6;
        }
    }
    

    为什么静态嵌套类可以声明看起来是实例字段InstanceInt?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Deepak Agrawal    7 年前

    静态嵌套类可以引用实例变量或通过对象引用在其中定义的方法。

    以下代码完全有效。

    public class OuterClass {
    
        public static void main(String[] args) {
            OuterClass.MyStaticClass myStaticClassOne = new OuterClass.MyStaticClass();
            OuterClass.MyStaticClass myStaticClassTwo = new OuterClass.MyStaticClass();
            OuterClass.MyStaticClass myStaticClassThree = new OuterClass.MyStaticClass();
            myStaticClassOne.setInstanceInt(10);
            myStaticClassTwo.setInstanceInt(20);
            System.out.println("staticInt: " + MyStaticClass.staticInt);
            System.out.println("instanceIntOne: " + myStaticClassOne.getInstanceInt());
            System.out.println("instanceIntTwo: " + myStaticClassTwo.getInstanceInt());
            System.out.println("instanceIntThree: " + myStaticClassThree.getInstanceInt());
    
        }
    
        static class MyStaticClass {
            static int staticInt = 5;
            int instanceInt = 6;
    
            public int getInstanceInt() {
                return instanceInt;
            }
    
            public void setInstanceInt(int instanceInt) {
                this.instanceInt = instanceInt;
            }
        }
    }
    

    输出:

    静态点:5

    实例:10

    实例2:20

    实例三:6

    退出代码0完成的进程

        2
  •  0
  •   kay    7 年前

    我假设你在问为什么instancent可以声明而不是静态字段?答案很简单,因为java没有理由限制它。

    这里有一个链接,可以更好地理解什么是静态类:

    https://www.geeksforgeeks.org/static-class-in-java/