考虑Java 8中的以下代码:
class OuterClass {
static class MyStaticClass {
static int staticInt = 5;
int instanceInt = 6;
}
}
为什么静态嵌套类可以声明似乎是实例字段的instanceInt?
答案 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没有理由限制它。
这里有一个链接,可以更好地了解什么是静态类: