无法从静态上下文引用非静态变量

我编写了以下测试代码:

类MyProgram
{
整数计数=0;
公共静态void main(字符串[]args)
{
系统输出打印项次(计数);
}
}

但它给出了以下错误:

Main.java:6:错误:无法从静态上下文引用非静态变量计数
系统输出打印项次(计数);
^

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

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

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

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

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

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

为了解决您的问题,您需要实例化类的一个实例(创建一个对象),这样运行时就可以为该实例保留内存(否则,不同的实例会相互覆盖,这是您不想要的)

在您的情况下,请尝试以下代码作为起始块:

公共静态void main(字符串[]args)
{
尝试
{
MyProgram7 obj=新的MyProgram7();
obj.run(args);
}
捕获(例外e)
{
e、 printStackTrace();
}
}
//这里的实例变量
公共无效运行(字符串[]args)引发异常
{
//把你的代码放在这里
}

新的main()方法创建它所包含的类的实例(听起来很奇怪,但是因为main()是用类而不是实例创建的,所以它可以这样做),然后调用实例方法(run()

发表评论