公共静态 void 主 () 访问非静态变量
2022-09-03 16:56:52
据说非静态变量不能在静态方法中使用。但确实如此。这是怎么回事?public static void main
据说非静态变量不能在静态方法中使用。但确实如此。这是怎么回事?public static void main
不,它没有。
public class A {
int a = 2;
public static void main(String[] args) {
System.out.println(a); // won't compile!!
}
}
但
public class A {
static int a = 2;
public static void main(String[] args) {
System.out.println(a); // this works!
}
}
或者,如果您实例化A
public class A {
int a = 2;
public static void main(String[] args) {
A myA = new A();
System.out.println(myA.a); // this works too!
}
}
也
public class A {
public static void main(String[] args) {
int a = 2;
System.out.println(a); // this works too!
}
}
将工作,因为此处是局部变量,而不是实例变量。方法局部变量在方法执行期间始终可访问,无论该方法是否可访问。a
static
是的,main 方法可以访问非静态变量,但只能通过实际实例间接访问。
例:
public class Main {
public static void main(String[] args) {
Example ex = new Example();
ex.variable = 5;
}
}
class Example {
public int variable;
}
当人们说“非静态变量不能在静态方法中使用”时,他们的意思是不能直接访问同一类的非静态成员(例如,在Keppils的答案中所示)。
相关问题:
更新:
当谈论非静态变量时,一个隐式意味着成员变量。(因为局部变量无论如何都不可能有静态修饰符。
在代码中
public class A {
public static void main(String[] args) {
int a = 2;
System.out.println(a); // this works!
}
}
您正在声明一个局部变量(即使它没有静态修饰符,它通常也不称为非静态变量)。