Java 内部类只能从方法访问外部类属性

Java 内部类只能从方法访问外部类属性,java,inner-classes,Java,Inner Classes,请查看此代码,该代码可以很好地编译: class OuterClass { String a = "A"; String b = "B"; String c = "C"; public static class StaticInnerClass { } public String stringConCat() { return a + b + c; } } 这是我所期望的,因为内部类可以访问外部类属性。但现在,当

请查看此代码,该代码可以很好地编译:

class OuterClass {

    String a = "A";
    String b = "B";
    String c = "C";


    public static class StaticInnerClass {

    }

    public String stringConCat() {
        return a + b + c;
    }
}
这是我所期望的,因为内部类可以访问外部类属性。但现在,当我尝试相同的代码,但将外部属性指定给内部属性时,系统会抱怨:

class OuterClass {

    String a = "A";
    String b = "B";
    String c = "C";


    public static class StaticInnerClass {
        String x = a; //this can not be done, why ?
    }

    public String stringConCat() {
        return a + b + c;
    }
}
编译时的错误/警告是:不能从静态上下文引用非静态字段
a

这是因为在方法
stringConCat()
中,您实际上需要一个实例来调用该方法(后构造函数调用),因此它是允许的吗?然而,在第二个示例中,没有实际的实例,所以它将其视为静态引用


我读过了,但它仍然没有下沉。有人能帮忙吗?

关键在错误消息中:“不能从静态上下文引用非静态字段a。”


内部类可以访问外部类变量,但是嵌套类是静态的,而不是内部的,并且变量不是静态的。要么使变量成为静态的,要么使嵌套类成为非静态的。

哦,我明白你现在所说的,克里斯,这是一个很好的观点。我的类是静态的,我试图访问一个非静态的值,这是不允许的,没有任何意义,因为外部类可以有很多实例,它不知道给我哪个“a”。我不知道为什么有人因为我问lol而投了反对票。非常感谢。“静态内部”在术语上是矛盾的。这是一个静态嵌套类。这里没有内部类。”“静态内部”在术语上是矛盾的。这里有一个静态嵌套类。