我写了这样的测试代码:

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

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


当前回答

最基本的事情是静态变量或静态方法是在类级别。类级变量或方法在实例级方法或变量之前加载。显然,没有加载的东西是不能使用的。所以java编译器不让在运行时处理的事情在编译时解决。这就是为什么它会给你错误非静态的东西不能从静态上下文中引用。你只需要阅读类级作用域、实例级作用域和局部作用域。

其他回答

为了能够从静态方法中访问它们,它们需要是静态成员变量,如下所示:

public class MyProgram7 {
  static Scanner scan = new Scanner(System.in);
  static int compareCount = 0;
  static int low = 0;
  static int high = 0;
  static int mid = 0;  
  static int key = 0;  
  static Scanner temp;  
  static int[]list;  
  static String menu, outputString;  
  static int option = 1;  
  static boolean found = false;

  public static void main (String[]args) throws IOException {
  ...

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

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

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

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

在这个程序中,你想使用count,所以将count方法声明为静态方法

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

您可以将此方法声明为公共私有并受保护。如果使用此方法,则可以创建安全应用程序。

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

The first thing is to know the difference between an instance of a class, and the class itself. A class models certain properties, and the behaviour of the whole in the context of those properties. An instance will define specific values for those properties. Anything bound to the static keyword is available in the context of the class rather than in the context of an instance of the class As a corollary to the above variables within a method can not be static static fields, and methods must be invoked using the class-name e.g. MyProgram7.main(...) The lifetime of a static field/method is equivalent to the lifetime of your application

如。 例如,汽车具有属性颜色,并表现出行为“运动”。 以25公里每小时的速度行驶的红色大众甲壳虫为例。

现在,汽车的静态属性将是道路上的车轮数量(4),这将适用于所有汽车。

HTH

在Java编程语言中,关键字static指示特定成员属于类型本身,而不是该类型的实例。

这意味着只创建了该静态成员的一个实例,该类的所有实例都共享该实例。

如果你想使用int count = 0;在static void main()中,count变量必须声明为static

static int count = 0;