在 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?
}
}
最佳答案
造成差异的不是nonStatic
。从不同的类访问。
尝试在 A 中这样做,它会编译:
class A {
int nonStatic = 7;
static void m( A a ) {
a.nonStatic = 12;
}
}
那么有什么不同呢?这就是你在上面读取静态变量的内容:
-
a.nonStatic
访问nonStatic
在一个实例上。不管这段代码在哪里,都可以。 - 只需输入
nonStatic
在A
内的实例(非静态)方法中与a.nonStatic
相似 (即this.nonStatic
)。这是允许的。 - 只需输入
nonStatic
在A
内的static 方法中相当于A.nonStatic
,无论它写在哪里,这都是一个问题。nonStatic
是一个实例字段,因此不能静态访问它(在任何地方作为A.nonStatic
,或在nonStatic
的静态方法中作为A
)
关于Java:为什么可以从类外部的静态方法访问非静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882556/