gpt4 book ai didi

java - 静态嵌套类如何拥有this指针

转载 作者:行者123 更新时间:2023-12-02 07:17:17 28 4
gpt4 key购买 nike

今天我正在阅读有关静态嵌套类的内容,由于下面的代码,我有点困惑。

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。您无法在不考虑某些外部类实例的情况下创建非静态内部类的实例。

附注

抱歉,您没有突出显示 thisinnerVar。两者都是内部类的非静态成员,因此您可以访问它们。仅当非静态成员属于 OUTER 类时,您才能访问它们。

关于java - 静态嵌套类如何拥有this指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787115/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com