Line 1: public class C {
Line 2: public static void main(String[] args) {
Line 3: // method2();
Line 4: }
Line 5:
Line 6:
Line 7: Circle c = new Circle();
Line 8: public static void method2() {
Line 9: // Circle c = new Circle();
Line 10:
Line 11: System.out.println("What is radius "+ c.getRadius()); //compile error : non-static variable c cannot be referenced from a static context. Why? here "c" is a instance variable.
Line 12: }
Line 13:
Line 14:
Line 15: }
Line 16:
Line 17: class Circle
Line 18: {
Line 19: public int getRadius()
Line 20: {
Line 21: return 3;
Line 22: }
Line 23: }
问题:在第 11 行,编译错误提示,不能从静态上下文引用非静态变量 c。为什么?这里“c”是一个实例变量。但下面的代码是可以的。为什么?
如果我将第 8 行更改为第 12 行
public static void method2() {
Circle c = new Circle();
System.out.println("What is radius "+ c.getRadius());
}
或者:
Circle c = new Circle();
public void method2() {
System.out.println("What is radius "+ c.getRadius());
}
最佳答案
当你使用static
关键字创建一个方法时,它就是一个静态方法,或者说是一个类方法。这意味着该对象的每个实例都是相同的,因此您无法从其内部访问实例变量。从静态方法内部,您只能访问静态变量或调用类的静态方法。
关于java - 从静态方法 java 引用实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199676/