有没有办法阻止java破坏一个对象

有没有办法阻止java破坏一个对象,java,Java,我想创建一个java游戏,让它记住一个对象。每当我重新运行游戏时,对象都会重新初始化,我会丢失所有存储的数据。有没有什么方法可以阻止java破坏我的对象并在我需要的时候引用它,即获取对象的内存地址?您必须实现存储游戏状态的功能。 再次启动时,应重新创建此保存状态 作为某种解决方案,您可以使用它 顺便说一句您可以使用常见的游戏快捷方式保存和退出状态: F5保存游戏状态 F9还原保存状态 此外,您还可以在关闭应用程序时查看操作系统将释放应用程序初始化(分配)的所有内存。因此,如果要在关闭应用程序

我想创建一个java游戏,让它记住一个对象。每当我重新运行游戏时,对象都会重新初始化,我会丢失所有存储的数据。有没有什么方法可以阻止java破坏我的对象并在我需要的时候引用它,即获取对象的内存地址?

您必须实现存储游戏状态的功能。
再次启动时,应重新创建此保存状态

作为某种解决方案,您可以使用它

顺便说一句您可以使用常见的游戏快捷方式保存和退出状态:

  • F5
    保存游戏状态
  • F9
    还原保存状态

此外,您还可以在关闭应用程序时查看操作系统将释放应用程序初始化(分配)的所有内存。因此,如果要在关闭应用程序后查找对象,必须对其进行序列化。这意味着对象必须作为字节保存在文件中,当应用程序再次启动时,可以从文件中初始化它。阅读此处

您可以使用ObjectInputStream和ObjectOutStream来读取和保存对象的信息。

您可以将对象序列化为文件,然后将其读回。您的对象将需要实现可序列化接口。然后,您可以简单地执行以下操作:

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接口。此外,您以后无法编辑该类,因为读取对象将导致异常,因为它不是同一个对象


您可以在此处找到有关序列化的更多信息:

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

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

  • 自动保存
  • 用户保存
第一种方法允许玩家在最近的进程中恢复一个状态,而不必担心显式保存其政党。 自动保存由选择自动保存相关时间的游戏设计师决定

第二个选项允许玩家在需要时保存其保存


关于保存游戏信息的方法,您有多种方法。

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

  • 如果您希望在应用程序之外拥有易于读取和修改的数据,您应该支持使用人类可读的数据语言,如XML或JSON。

  • 如果您不希望数据是人类可读的,您可以使用

  • 如果您需要强大的性能,那么应该使用第三个库 至于执行序列化


使用数据库与在线游戏相关,但对于离线游戏,这通常是一种开销。

这就是各种数据库的发明目的。研究关系、NoSQL、序列化(如XML或JSON)到文件,或解决此问题的任何其他方法。非常感谢。感谢您的快速回答,我使用了序列化!:D