今天我正在阅读有关静态嵌套类的内容,由于下面的代码,我有点困惑。
class testOuter {
int x;
static class inner {
int innerVar;
public void testFunct() {
x = 0; // Error : cannot make static reference to non static field
innerVar = 10;
outerFunc(this);
}
}
static void outerFunc(SINGLETON s) {
}
}
我对静态嵌套类的理解是,它的行为就像外部类的静态成员。它只能引用静态变量并且可以调用静态方法。从上面的代码来看,x=0
处的错误没有问题。
但是我感到困惑的是,如果它的行为像静态 block ,那么它允许我修改innerVar,它不是静态的,而且它怎么会有这个指针。那么如果嵌套类是静态的,那么里面的方法还是隐式地不是静态的?
最佳答案
写成static int x
而不是int x
,那么它就可以工作。正如您自己所说,静态内部类只能访问外部类的静态成员。由于 x
在您的代码中不是静态的,因此您无法访问它。
附注
请注意,所有普通类都是静态的,即每次应用程序运行时都存在一个类信息实例。因此,当您将内部类声明为static
时,您只需声明它与普通类一样。
相反,非静态内部类则不同。非静态内部类的每个实例都是一个闭包,即它与外部类的某个实例相关联。 IE。您无法在不考虑某些外部类实例的情况下创建非静态内部类的实例。
附注
抱歉,您没有突出显示 this
和 innerVar
。两者都是内部类的非静态成员,因此您可以访问它们。仅当非静态成员属于 OUTER 类时,您才能访问它们。
关于java - 静态嵌套类如何拥有this指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787115/