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

标签 java

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

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/

相关文章:

java - 我的 (Java/Swing) MouseListener 没有监听,请帮我找出原因

java - App Engine Java 单元测试环境设置

java - 仅显示 Viewflipper 中最后一个 Flipper 图像的按钮

java - 如何区分不同jar版本的类加载器?

java - 如何使用Java进行时间运行

java - 什么 POM 依赖项可以让 Maven 找到这个 JAR?

java - 安装 Blackboard Auto Signon 构建 block

java - 在 JDialog 中的 JPanel 周围添加空间?

java - Java Web 应用程序中的唯一序列号

java - 在执行其他代码之前如何完成 AsyncTask