猿问

java类销毁的另一个类

当我遇到这个问题时,我正在用 Java 编写我的 AI 项目。我首先使用“Pasture”类生成一些游戏的环境。然后编写在“Shepherd”类中的智能代理使用它的公共接口向“Pasture”类提出一些问题,然后根据结果移动。现在,当某些条件成立时,游戏结束,我可以简单地打印分数,然后调用 System.exit(0) 来结束程序。但是,我想在游戏结束时开始一个新游戏,而不是仅仅结束整个程序。现在我需要销毁“Shepherd”类来结束代理,然后开始一个新游戏。我知道java类有析构函数。问题是:我可以调用另一个java类的析构函数吗(在这种情况下是“Shepherd”类 )在另一个类中(在这种情况下是“牧场”类)?以及如何编写析构函数?语法是什么?

谢谢大家。我得到了它。我错了析构函数。我只是认为像c ++一样,java也有析构函数。


catspeake
浏览 103回答 2
2回答

暮色呼如

现在我需要销毁“Shepherd”类来结束代理,然后开始一个新游戏。我知道java类有析构函数。你误解了一些相当基本的东西:Java 没有析构函数。你可能会混淆析构函数和终结函数。这些是在 GC 决定删除对象后调用的方法。(这是一个过度简化......但真正的问题是终结器与这个问题无关。事实上,终结器相关的情况很少。)你不能破坏物体。当不再需要对象时,垃圾收集器会销毁它们。更具体地说,它们在无法访问时被销毁;即当它们不再影响程序的执行时。所以你会怎么做?首先,忘记“破坏”对象。而是考虑如何为下一场比赛做准备。有两种方法。您可以reset()在开始新游戏时需要重置/重新初始化的所有“游戏”对象上实现一个或类似的方法。您可以简单地将所有相关的“游戏”对象放在地板上并创建新对象。(GC 会处理垃圾。)或者您可以结合使用这两种方法;例如,将Pasture对象重置为其初始状态并丢弃/重新创建Shepard,Sheep等等。

慕村9548890

Java 中没有可以编程或调用的析构函数。要告诉垃圾收集器您不再使用对象,您可以将其设置为 nullmyObject = null;如果您有一些需要关闭/释放的资源,您当然可以创建自己的 destruct 方法,但您必须手动调用它myObject.closeResources();myObject = null;或者,如果你想重用一个对象,你可以有一个重置方法,将对象设置为与它首次创建时相同的状态,你可以让你的构造函数调用相同的方法,然后手动执行。public class MyClass {    public MyClass() {        this.reset();    }}MyClass myObject = new MyClass();...myObject.reset();
随时随地看视频慕课网APP

相关分类

Java
我要回答