一尘不染

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

java

我在使我的应用程序正常工作时遇到了一些麻烦。

我得到了 error: error: non-static variable object1 cannot be referenced from a static context

我确实收到了错误:

error: object_game is not abstract and does not override abstract method keyPressed(KeyEvent) in KeyListener
public class car_game extends JFrame implements Runnable, KeyListener

但是我解决了这个问题,因为我需要keyTyped, keyPressed, keyReleased定义。

这是我的代码:

public class car_game extends JFrame implements Runnable, KeyListener
{
    public object object1;

    //Main program
    public static void main(String[] args) 
    {
        object1 = new Object() {};


        Thread t = new Thread(new object_game());
        t.start();
    }

阅读 220

收藏
2020-12-03

共1个答案

一尘不染

您的“主要”方法被认为是静态的,因此它只能访问静态对象,请尝试将object1声明为静态:

public static Object object1;

编辑:如果您需要2个对象,则这样做没有任何危害:

public static Object object1;
public static Object object2;

不要混淆静态字段和静态类(例如Singleton)。在此上下文中,静态(静态Object
object1)仅表示在类car_game的每个实例中只有一个对象的实例,在上述情况下,即使您实例化了10个对象,也只有2个Object(object1和object2)实例。类型为“
car_game”的对象。

例如,如果我愿意:

car_game carGameObject1 = new car_game();
car_game carGameObject2 = new car_game();
carGameObject1.setObject1("this is one");

然后:

System.out.println(carGameObject2.getObject1());

它会打印“ this is one”,因为因为object1是静态的,所以该字段所属的类的所有实例将共享同一实例。

2020-12-03