为什么静态嵌套类似乎具有实例字段?

时间:2018-07-06 19:30:31

标签: java class static nested

考虑Java 8中的以下代码:

class OuterClass {

    static class MyStaticClass {

        static int staticInt = 5;
        int instanceInt = 6;
    }
}

为什么静态嵌套类可以声明似乎是实例字段的instanceInt?

2 个答案:

答案 0 :(得分:1)

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

以下代码完全有效。

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;
        }
    }
}

输出:

staticInt:5

instanceIntOne:10

instanceIntTwo:20

instanceIntThree:6

以退出代码0结束的过程

答案 1 :(得分:0)

我假设您在问为什么可以声明instanceInt而不是静态字段?答案仅仅是因为Java没有理由限制它。

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

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