java为什么不能从静态环境引用非静态变量?
你必须了解一个类与该类实例之间的区别。如果你在街上看到汽车,即使你看不到哪种型号或类型,也将立即知道它是汽车。这是因为你将看到的与“汽车” 类进行了比较。该类包含与所有汽车相似的类。可以将其视为模板或想法。
同时,你看到的汽车是“汽车”类的一个实例,因为它具有你期望的所有属性:有人驾驶它,它有引擎,车轮。
因此,该班级说“所有汽车都有颜色”,而实例说“这辆特定的汽车是红色的”。
在OO世界中,你定义类,并在类内部定义type字段Color。当实例化该类时(创建特定实例时),将为该颜色保留内存,并且可以为该特定实例指定颜色。由于这些属性是特定的,因此它们是非静态的。
静态字段和方法与所有实例共享。它们用于特定于类而不是特定实例的值。对于方法,这通常是全局辅助方法(如Integer.parseInt())。对于字段,通常是常量(例如汽车类型,即你的集合有限且不经常更改的东西)。
Integer.parseInt()
为了解决你的问题,你需要实例化类的实例(创建对象),以便运行时可以为该实例保留内存(否则,不同的实例会相互覆盖你不想要的实例)。
在你的情况下,请尝试以下代码作为起点:
public static void main (String[] args) { try { MyProgram7 obj = new MyProgram7 (); obj.run (args); } catch (Exception e) { e.printStackTrace (); } } // instance variables here public void run (String[] args) throws Exception { // put your code here }
新main()方法创建了它所包含的类的一个实例(听起来很奇怪,但是由于main()是用该类而不是用该实例创建的,所以可以做到这一点),然后调用一个实例方法(run())。
main()
run()