当前位置: 首页 > 知识库问答 >
问题:

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

杜经艺
2023-03-14

我编写了以下测试代码:

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);
                           ^

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

共有1个答案

朱慈
2023-03-14

您必须了解类和该类的实例之间的区别。如果你在街上看到一辆车,即使你看不出是哪种型号或类型,你也会立刻知道这是一辆车。这是因为你把你看到的东西和“车”这个类进行比较。类包含与所有CARS相似的内容。把它当成一个模板或者一个想法。

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

所以类说“All cars have a color”,实例说“This specific car is red”。

在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())。

 类似资料:
  • 我是Android编码的n00b,今天我想尝试使用定位服务。 我设置了一个简单的类和一个简单的main,只是为了得到经度和纬度。 但当我尝试调用retrive的构造时,long and latitude Android Studio弹出了一个错误: 错误:(33,16)错误:无法从静态上下文引用非静态变量纬度 这是我的位置班

  • 问题内容: 我是Java新手,我正在尝试通过递归函数部署斐波那契跟踪,然后计算运行时间。这是我设法编写的代码: 问题是,当我尝试将其转换为字节码时,出现以下错误: 我想知道是什么问题?! 问题答案: 更改 至 并使该方法静态。 或者,改变 至

  • 错误来自此行板状态 addme = 新板状态(); 由于某种原因,它所指向的非静态变量是“新”的。我不清楚如何修复这个错误,因为new不应该是一个变量,也不是。 查看stackoverflow记录,该错误通常来自非静态方法,通常通过将该方法设为静态或完全绕过该方法来解决。T 下面的代码是为了引用这个语句前后发生的事情。 }……

  • 我在阅读Kathy and Bert SCJP1.6时遇到了以下代码: 虽然是在跟踪变量的主题下,但我无法理解如何在main()方法(static)中引用非静态变量myBar?

  • 问题内容: 我在使我的应用程序正常工作时遇到了一些麻烦。 我得到了 我确实收到了错误: 但是我解决了这个问题,因为我需要定义。 这是我的代码: 问题答案: 您的“主要”方法被认为是静态的,因此它只能访问静态对象,请尝试将object1声明为静态: 编辑:如果您需要2个对象,则这样做没有任何危害: 不要混淆静态字段和静态类(例如Singleton)。在此上下文中,静态(静态Object object

  • 原谅我的无知。我是初学者: 为什么下面的代码给我以下编译错误?[line: 16]非静态变量x不能从静态上下文中引用