[英]Why cant I access non-static variables indirectly from non-static methods?
[英]Java: Why are accessible non-static variables from a static methods outside from the class?
在Java中,当我们想从静态方法访问非静态变量时,会出现编译错误:
“无法静态引用非静态字段nonStatic”
但是我使用静态方法创建了另一个类,并且可以达到该非静态变量。 为什么是这样?
因此,在A类中,“ return nonStatic”行和“ nonStatic = 4”行是错误的。 但是在类App方法m中,而类B方法m正在工作。
public class App
{
public static void main( String[] args )
{
A a = new A();
m( a );
System.out.println(a.nonStatic);
}
static void m( A a ) {
a.nonStatic = 12; //its good...why?
}
}
class A{
int nonStatic = 7;
static int getOrSetNonStatic(){
// return nonStatic; //error
// nonStatic = 4; //error
return 0;
}
}
class B {
static void m( A a ) {
a.nonStatic = 12; //its good...why?
}
}
因为您将它作为参数传递给了方法。
如果为方法参数指定其他名称,可能会更清楚。 然后,您会看到member字段不是作为a可见的,而是仅在参数名称下可见。
区别在于,不是从不同的类访问nonStatic
的事实。
尝试在A中执行此操作,它将编译:
class A {
int nonStatic = 7;
static void m( A a ) {
a.nonStatic = 12;
}
}
那有什么区别呢? 您在以下位置读取了静态变量:
a.nonStatic
访问实例上的nonStatic
。 无论此代码在哪里,都可以。 A
内的实例 (非静态)方法中简单地键入nonStatic
类似于 a.nonStatic
(即this.nonStatic
)。 这是允许的。 A
内的静态方法中简单地键入nonStatic
等效于A.nonStatic
,这是一个问题,无论它写在哪里。 nonStatic
是实例字段,因此无法静态访问(作为A.nonStatic
在任何地方,或作为A
的静态方法中的nonStatic
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.