**已关闭。**此问题为not reproducible or was caused by typos。目前不接受回答。
这个问题是由一个错字或一个无法再重现的问题引起的。虽然类似的问题可能在这里是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question的
如果我在同一个文件中序列化和非序列化一个对象,我不知道为什么静态成员也被序列化了,但是如果我注解了序列化部分,它就可以工作了。好吧,如果在类中完成了,它们有什么关系吗?根据文档,静态成员不能被序列化,但是这里的静态成员在打印出来时显示了序列化的值。
import java.io.*;
class Student_serial implements Serializable
{
int rollNo;
String name;
String dept;
float avg;
public static int Data = 10;
public transient int t = 100;
public Student_serial()
{
}
public Student_serial(int r, String n, String d, float a)
{
rollNo = r;
name = n;
dept = d;
avg = a;
Data = 500;
t = 500;
}
public String toString()
{
return "\nStudent Details\n"+
"\nRoll "+rollNo+
"\nName "+name+
"\nAverage "+avg+
"\nDept "+dept+
"\nData "+Data+
"\nTransient "+t+"\n";
}
}
public class Object_Stream_And_Serialisation {
public static void main(String[] args) throws Exception
{
//Serialisation of Object
FileOutputStream fos = new FileOutputStream("C:/users/kbb91/Desktop/A-B-Java/Studetn3.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Student_serial s = new Student_serial(7, "KB", "Army", 9.5f);
oos.writeObject(s);
//Deserialization of Object
FileInputStream fis = new FileInputStream("C:/users/kbb91/Desktop/A-B-Java/Studetn3.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Student_serial s1;
s1 = (Student_serial) ois.readObject();
System.out.println(s1);
}
}
字符串
我正在获取的输出
Student Details
Roll 7
Name KB
Average 9.5
Dept Army
Data 500
Transient 0
型
预期输出
Student Details
Roll 7
Name KB
Average 9.5
Dept Army
Data 10
Transient 0
型
1条答案
按热度按时间kg7wmglp1#
根据文档......实际上......
static
字段不会被Java对象序列化序列化和非序列化。这里实际发生的是,
static int Data
字段被第二个Student_serial
构造函数设置为500
。如果您将“保存学生”和“加载学生”功能放入两个类中,这样“加载学生”类就不会使用第二个构造函数,您将看到
Data
的值如您所期望的那样被报告。您评论:
我的老师已经拒绝了我的答案,因为我的输出中,我得到的数据为500。
那么,为什么要在构造函数中设置为500呢?
备注:
1.构造函数不应该像这样设置静态字段。
如果你想让Java开发人员阅读你的代码,你需要遵循标准的Java风格。(选择一个特定的风格指南...)