繁体   English   中英

Java中的静态嵌套类

[英]Static nested classes in Java

我不确定为什么这段代码编译...引用Java教程:

与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法 - 它只能通过对象引用来使用它们。

Src: http//docs.oracle.com/javase/tutorial/java/javaOO/nested.html

public class StaticNested {

    private String member;
    private static String staticMember;

    static class StaticNestedClass {
        private void myMethod() {
            System.out.println(staticMember);
            StaticNested nested = new StaticNested();
            System.out.println(nested.member);
        }
    }
}

我没想到能够直接访问成员,但代码编译得很好。 我误解了Java规范吗?

抱歉格式化,我正在努力使用我的浏览器+帖子编辑器。

不是直接访问实例成员。

staticMember正在访问非实例成员,而nested.member正在通过对象引用访问它。

这是正确的行为。 什么规范意味着(在您的代码示例中)您不能直接在静态嵌套类中访问非静态成员字段String member

public class StaticNested {

    private String member;
    private static String staticMember;

    static class StaticNestedClass {
        private void myMethod() {
            System.out.println(staticMember);
            System.out.println(member);//<-here you will get compilation error
        }
    }
}

但是因为非静态字段属于类的对象,所以可以像在代码中一样参考该对象来访问它

StaticNested nested = new StaticNested();
System.out.println(nested.member);

您正通过实例(非静态)访问它。

并不编译:

System.out.println(member);

编译器消息:

无法对非静态字段成员进行静态引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM