不能从静态上下文中引用非静态变量

新手上路,请多包涵

我写了这个测试代码:

 class MyProgram
{
    int count = 0;
    public static void main(String[] args)
    {
        System.out.println(count);
    }
}

但它给出了以下错误:

 Main.java:6: error: non-static variable count cannot be referenced from a static context
        System.out.println(count);
                           ^

如何让我的方法识别我的类变量?

原文由 Greg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 354
1 个回答

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

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

所以类说“所有的车都有颜色”,实例说“这辆特定的车是红色的”。

在 OO 世界中,您定义了类,并在类内部定义了一个类型为 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() )。

原文由 Aaron Digulla 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题