我写了一个程序,可以序列化。。。
如
class Student{
private static int count=0;
//其他字段省略了
public Student(){
count++;
}
public String toString(){
return "count : "+count;
}
。。。。
}
通过ObjectOutputStream 输出到一个文件中,然后在读出来,
有这么一句:
Student stu = (Student)ois.readObject();
System.out.println(stu);//输出count: 1
有做过类似试验的吗?你们也觉得静态变量不能序列化吗?
java 真的 不能 序列化静态变量么??
答案:2 悬赏:70 手机版
解决时间 2021-02-04 13:56
- 提问者网友:星軌
- 2021-02-04 08:38
最佳答案
- 五星知识达人网友:你可爱的野爹
- 2021-02-04 08:45
测试一下先。。这个没整过
果然不可以序列化。。是JVM加载类的时候分配的值。。。。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class MapPositionQuestion {
public static void main(String args[]) throws Exception, IOException {
Position pos = new Position();
pos.setY(11);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/test.txt"));
oos.writeObject(pos);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/test.txt"));
Object obj = ois.readObject();
System.out.println(Position.class.getField("x").get(obj));
ois.close();
}
}
class Position implements Serializable{
public static int x = 9;
private int y;
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
果然不可以序列化。。是JVM加载类的时候分配的值。。。。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class MapPositionQuestion {
public static void main(String args[]) throws Exception, IOException {
Position pos = new Position();
pos.setY(11);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/test.txt"));
oos.writeObject(pos);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/test.txt"));
Object obj = ois.readObject();
System.out.println(Position.class.getField("x").get(obj));
ois.close();
}
}
class Position implements Serializable{
public static int x = 9;
private int y;
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
全部回答
- 1楼网友:神的生死簿
- 2021-02-04 09:41
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现serializable接口,该接口没有需要实现的方法,implements serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:fileoutputstream)来构造一个 objectoutputstream(对象流)对象,接着,使用objectoutputstream对象的writeobject(object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯