java - 从静态方法 java 引用实例变量

标签 java reference static

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/

相关文章:

java - 用 GUI 表示二维数组

.htaccess - 动态到静态 url 并删除动态

iphone - iOS NSKeyedUnarchiver 使用静态库时出错

grails - 在 Grails 1.4 中,静态不返回任何 css 或 js 资源

java - 这段代码我缺少什么?谷歌 foo.bar

java - 在 Maven 模块化项目中查找未使用的代码

java - DITA 打开工具包错误 : java. lang.StackOverflowError

java - 在凯撒密码中引用数组中的字符

C++ 传递指针引用

php - 通过相应的值访问 PHP MySQLI 预定义常量?