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

标签 java variables compiler-errors non-static

我写了这个测试代码:

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

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

最佳答案

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

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

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

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

静态字段和方法与所有实例共享。它们用于特定于类而不是特定实例的值。对于方法,这通常是全局帮助器方法(例如 Integer.parseInt())。对于字段,它通常是常量(例如汽车类型,即您拥有一组不经常更改的有限集合)。

要解决您的问题,您需要实例化类的实例(创建对象),以便运行时可以为实例保留内存(否则,不同的实例将相互覆盖,这是您不希望的)。

根据您的情况,请尝试将此代码作为起始 block :

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

关于java - 不能从静态上下文中引用非静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58046613/

相关文章:

java - 我如何获取先前计算的 x 和 y 值并将它们放入 g.drawLine 参数中

java - 你有 "architecture for architecture' s 的好例子吗?

java - 静态ArrayList总是替换旧值

objective-c - 使用 Objective-C 工厂方法在 Swift 中创建对象会出现编译器错误

Qt 不承认声明的类

c - 为什么下面的代码会显示错误?

java - Spring、Hibernate 和 AbstractTransactionalJUnit4SpringContextTests : objects with multiple mappings to same underlying data cannot be found

java - REST API 在带有 H2 数据库的 Spring Boot Maven 多模块项目中总是抛出 404 错误

java - 在我的代码中找不到符号变量 java 错误

c - 一个函数正在从另一个函数中提取变量值,但我不希望它这样做,也不知道它是如何做到的