java class 摧毁另一个 class

java class destroy's another class

我在 java 编写我的 AI 项目,而我 运行 遇到了这个问题。我首先使用 class "Pasture" 生成一些游戏的环境。然后用 class "Shepherd" 编写的智能代理使用它的 public 界面从 "Pasture" class 询问一些问题,然后根据结果移动。现在,当某些条件成立时,游戏结束,我可以简单地打印分数,然后调用 System.exit(0) 来结束程序。但是,我想在游戏结束时开始一个新游戏,而不是仅仅结束整个程序。现在我需要销毁 "Shepherd" class 来结束代理,然后开始新游戏。我知道 java classes 有析构函数。问题是: 我可以在另一个 class 中调用另一个 java class(在本例中为 class "Shepherd")的析构函数(在本例中为 class "Pasture")? 以及如何编写析构函数方法?语法是什么?

谢谢大家。我知道了。我对析构函数的看法是错误的。我只是觉得和c++一样,java也有析构函数。

java 中没有您可以编程或调用的析构函数。要告诉垃圾收集器您不再使用某个对象,您可以将其设置为 null

myObject = null;

如果您有一些资源需要 closed/freed 您当然可以创建自己的 destruct 方法,但您必须手动调用它

myObject.closeResources();
myObject = null;

或者如果你想重用一个对象,你可以有一个重置方法,将对象设置为与第一次创建时相同的状态,你可以让你的构造函数调用相同的方法,然后你手动执行.

public class MyClass {
    public MyClass() {
        this.reset();
    }
}

MyClass myObject = new MyClass();
...

myObject.reset();

Now I need to destroy the "Shepherd" class to end the agent and then start a new game. I know that java classes has destructors.

你误解了一些相当基本的东西:

  1. Java 没有析构函数。您可能会将析构函数与终结器混淆。这些是在 GC 决定删除对象后 调用的方法。 (这是一个过于简单化......但真正的重点是终结器与这个问题无关。事实上,终结器相关的情况很少。)

  2. 你不能破坏对象。对象在不再需要时被垃圾收集器销毁。更具体地说,它们在无法访问时被销毁;即当它们不再影响程序的执行时。

那你是做什么的?

首先,忘记 "destroying" 个对象。而是想想如何准备下一场比赛。有两种方法。

  1. 您可以在开始新游戏时对所有需要重置/重新初始化的 "game" 对象实施 reset() 或类似方法。

  2. 您可以简单地将所有相关 "game" 对象放在地板上并创建新对象。 (GC 会处理垃圾。)

或者您可以结合使用这两种方法;例如将 Pasture 对象重置为其初始状态并丢弃/重新创建 ShepardSheep 等等。