java 为什么静态成员会被序列化,如果我在同一个文件中序列化和反序列化一个对象[关闭]

798qvoo8  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(166)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受回答。

这个问题是由一个错字或一个无法再重现的问题引起的。虽然类似的问题可能在这里是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
如果我在同一个文件中序列化和非序列化一个对象,我不知道为什么静态成员也被序列化了,但是如果我注解了序列化部分,它就可以工作了。好吧,如果在类中完成了,它们有什么关系吗?根据文档,静态成员不能被序列化,但是这里的静态成员在打印出来时显示了序列化的值。

  1. import java.io.*;
  2. class Student_serial implements Serializable
  3. {
  4. int rollNo;
  5. String name;
  6. String dept;
  7. float avg;
  8. public static int Data = 10;
  9. public transient int t = 100;
  10. public Student_serial()
  11. {
  12. }
  13. public Student_serial(int r, String n, String d, float a)
  14. {
  15. rollNo = r;
  16. name = n;
  17. dept = d;
  18. avg = a;
  19. Data = 500;
  20. t = 500;
  21. }
  22. public String toString()
  23. {
  24. return "\nStudent Details\n"+
  25. "\nRoll "+rollNo+
  26. "\nName "+name+
  27. "\nAverage "+avg+
  28. "\nDept "+dept+
  29. "\nData "+Data+
  30. "\nTransient "+t+"\n";
  31. }
  32. }
  33. public class Object_Stream_And_Serialisation {
  34. public static void main(String[] args) throws Exception
  35. {
  36. //Serialisation of Object
  37. FileOutputStream fos = new FileOutputStream("C:/users/kbb91/Desktop/A-B-Java/Studetn3.txt");
  38. ObjectOutputStream oos = new ObjectOutputStream(fos);
  39. Student_serial s = new Student_serial(7, "KB", "Army", 9.5f);
  40. oos.writeObject(s);
  41. //Deserialization of Object
  42. FileInputStream fis = new FileInputStream("C:/users/kbb91/Desktop/A-B-Java/Studetn3.txt");
  43. ObjectInputStream ois = new ObjectInputStream(fis);
  44. Student_serial s1;
  45. s1 = (Student_serial) ois.readObject();
  46. System.out.println(s1);
  47. }
  48. }

字符串
我正在获取的输出

  1. Student Details
  2. Roll 7
  3. Name KB
  4. Average 9.5
  5. Dept Army
  6. Data 500
  7. Transient 0


预期输出

  1. Student Details
  2. Roll 7
  3. Name KB
  4. Average 9.5
  5. Dept Army
  6. Data 10
  7. Transient 0

kg7wmglp

kg7wmglp1#

根据文档......实际上...... static字段不会被Java对象序列化序列化和非序列化。
这里实际发生的是,static int Data字段被第二个Student_serial构造函数设置为500
如果您将“保存学生”和“加载学生”功能放入两个类中,这样“加载学生”类就不会使用第二个构造函数,您将看到Data的值如您所期望的那样被报告。
您评论:
我的老师已经拒绝了我的答案,因为我的输出中,我得到的数据为500。
那么,为什么要在构造函数中设置为500呢?
备注:
1.构造函数不应该像这样设置静态字段。

  • 你有一个明显的风格问题:
  • 类标识符应该是以大写字母开头的 Camel 大小写,并且没有下划线
  • 变量标识符应该是以小写字母开头的驼峰大小写,并且没有下划线

如果你想让Java开发人员阅读你的代码,你需要遵循标准的Java风格。(选择一个特定的风格指南...)

相关问题