[英]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.