一尘不染

java为什么不能从静态环境引用非静态变量?

java static

java为什么不能从静态环境引用非静态变量?


阅读 438

收藏
2020-01-07

共1个答案

一尘不染

你必须了解一个类与该类实例之间的区别。如果你在街上看到汽车,即使你看不到哪种型号或类型,也将立即知道它是汽车。这是因为你将看到的与“汽车” 类进行了比较。该类包含与所有汽车相似的类。可以将其视为模板或想法。

同时,你看到的汽车是“汽车”类的一个实例,因为它具有你期望的所有属性:有人驾驶它,它有引擎,车轮。

因此,该班级说“所有汽车都有颜色”,而实例说“这辆特定的汽车是红色的”。

在OO世界中,你定义类,并在类内部定义type字段Color。当实例化该类时(创建特定实例时),将为该颜色保留内存,并且可以为该特定实例指定颜色。由于这些属性是特定的,因此它们是非静态的。

静态字段和方法与所有实例共享。它们用于特定于类而不是特定实例的值。对于方法,这通常是全局辅助方法(如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())。

2020-01-08