有没有办法阻止Java销毁对象?

3

我想创建一个Java游戏并让它记住一个对象。每次重新运行游戏时,该对象将被重新初始化,我会失去所有已存储的数据。是否有办法阻止Java销毁我的对象,并在需要时引用它(即获取对象的内存地址)?


1
这就是各种数据库被发明出来的原因。可以研究关系型、NoSQL、将数据序列化为XML或JSON文件,或者任何其他已经解决了这个问题的方法。 - duffymo
序列化解决了问题。谢谢! - pestopasta
5个回答

3
你需要实现一个功能来存储游戏状态。
当你再次启动它时,应该重新创建这个保存的状态。
作为一种解决方案,你可以使用序列化
顺便提一下,你可以使用常见的游戏快捷键来保存和恢复状态:

  • F5 保存游戏状态
  • F9 恢复保存的状态
此外,你可以查看GoF状态模式

谢谢您的快速回答,我使用了序列化! :D - pestopasta

2

您可以将对象序列化到文件中,然后再读取它。您的对象需要实现Serializable接口。然后只需执行以下操作:

public class MyData implements Serializable{
    int data;

    public MyData (int data) {
        this.data = data;
    }
}

假设我们想保存MyData对象。这里是一个简单的测试:

public static void main(String[] args) throws Exception {
    MyData data = new MyData(5);
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myobject.ser"));
    oos.writeObject(data);
    oos.close();
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myobject.ser"));
    data = (MyData) ois.readObject();
    System.out.println(data.data);
}

请记住,如果您想序列化对象,则该对象的所有字段都必须实现Serializable接口。此外,您不能稍后编辑类,因为读取对象将导致异常,因为它不会是相同的对象。

您可以在此处找到有关序列化的更多信息:https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html


1
当您关闭应用程序时,操作系统将释放应用程序初始化(分配)的所有内存。因此,如果您想在关闭应用程序后找到对象,则必须对其进行序列化。这意味着该对象必须作为文件中的字节保留,并且当您的应用程序再次启动时,可以从该文件中初始化它。在此处阅读 https://www.tutorialspoint.com/java/java_serialization.htm

1
你可以使用ObjectInputStream和ObjectOutputStream来读取和保存对象的信息。

0

当JVM停止时,所有分配的对象都将被释放。
因此,在应用程序内部处理持久性以避免在关闭时丢失应用程序状态。

在具有状态持久性的游戏开发中,我们通常有两种保存类型:

  • 自动保存
  • 用户保存。

第一种允许玩家检索接近其上次进度的状态,而不必担心显式保存其派对。 自动保存由选择相关时间进行自动保存的游戏设计师决定。

第二种允许玩家在想要保存时保存其存档。


关于如何保存游戏信息,您有多种方式可以实现。

以下是三种简单标准的方法:

  • 如果您想要在应用程序外部轻松读取和修改数据,应该使用人类可读的数据格式,例如XML或JSON。

  • 如果您不希望数据易于阅读,则可以使用标准Java序列化

  • 如果您需要强大的性能,则应使用第三方库快速序列化来执行序列化操作。

对于在线游戏,使用数据库是相关的,但对于离线游戏来说,它往往是过度的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接