![](/img/trans.png)
[英]Can Anonymous inner class instantiated within a static method has access to instance members of containing class?
[英]Static method cannot access instance members of a class
在Liang的第9版Java编程简介中,它指出“静态方法不能访问类的实例成员”(第312页)。 我明白为什么类的实例成员需要访问方法(可能是静态的),但为什么方法需要访问实例成员? 对我来说,“访问”意味着“通过点运营商访问”。 换一种说法:
Class myClass = new Class();
myClass.someStaticMethod();
有道理,而:
someNonStaticMethod.myClass
要么
someStaticMethod.myClass
才不是。 是否允许someNonStaticMethod.myClass语法? 我不相信我见过这样的格式。 如果不允许,为什么提到静态方法无法访问类的实例成员?
请帮助解除我的困惑。
-DI
您无法从静态方法访问实例变量。
public class Example {
private Object instanceVariable;
public static void staticMethod() {
// Cannot use this in a static context
this.instanceVariable = null;
}
}
您可以从实例方法访问实例变量。
public class Example {
private Object instanceVariable;
public void instanceMethod() {
this.instanceVariable = null;
}
}
您不应该使用this
方法从实例方法访问静态变量。
public class Example {
private static Object staticVariable;
public void instanceMethod() {
// The static field Example.staticVariable should be accessed in a static way
this.staticVariable = null;
}
}
您始终可以访问静态变量。 您应该使用类名。
public class Example {
private static Object staticVariable;
public void instanceMethod() {
Example.staticVariable = null;
}
}
静态方法不能引用类的非静态实例字段。
如果您想了解原因:可以在没有类实例的情况下调用静态方法,因此在调用方法时无论如何都不会存在非静态方法。
它在谈论这个:
public MyClass
{
private String test;
public static String getTest()
{
return this.test; //this is not possible because a static method cannot access an instance variable or method
}
}
静态方法无法访问实例变量的原因是因为静态引用类而不是类的特定实例,因此没有要访问的实例变量。 测试将仅在使用new MyClass
时存在,现在测试将存在。 但是,如果我调用静态方法MyClass.getTest()
,则不会创建test
实例变量。
可以通过创建对象来访问静态方法中的实例变量
public class Test {
int x =10;
public static void main(String[]args)
{
Test t1 = new Test();
System.out.println(t1.x);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.