为了账号安全,请及时绑定邮箱和手机立即绑定

java类销毁的另一个类

java类销毁的另一个类

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

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

现在我需要销毁“Shepherd”类来结束代理,然后开始一个新游戏。我知道java类有析构函数。

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

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

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

所以你会怎么做?

首先,忘记“破坏”对象。而是考虑如何为下一场比赛做准备。有两种方法。

  1. 您可以reset()在开始新游戏时需要重置/重新初始化的所有“游戏”对象上实现一个或类似的方法。

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

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


查看完整回答
反对 回复 2022-05-12
?
慕村9548890

TA贡献1884条经验 获得超4个赞

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


myObject = null;

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


myObject.closeResources();

myObject = null;

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


public class MyClass {

    public MyClass() {

        this.reset();

    }

}


MyClass myObject = new MyClass();

...


myObject.reset();


查看完整回答
反对 回复 2022-05-12
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信