java 真的 不能 序列化静态变量么??

我写了一个程序,可以序列化。。。如classStudent{privatestaticintcount=0;//其他字段省略了publicStudent(){count+... 我写了一个程序,可以序列化。。。

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

有做过类似试验的吗?你们也觉得静态变量不能序列化吗?
展开
 我来答
飞蛋蛋
推荐于2016-03-22 · TA获得超过973个赞
知道小有建树答主
回答量:816
采纳率:0%
帮助的人:653万
展开全部
测试一下先。。这个没整过
果然不可以序列化。。是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;
}
}
davidchenbin
2009-06-19 · TA获得超过161个赞
知道答主
回答量:31
采纳率:0%
帮助的人:20.1万
展开全部
静态变量不属于对象,属于类。不能被序列化。还有瞬态的变量也不能被序列化 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你过的好吗byb
2021-08-20
知道答主
回答量:1
采纳率:0%
帮助的人:461
展开全部
你这个程序是在一个jvm进程中的,所以反序列化出对象以后,stu对象还是会去方法区中找静态变量的值。你关掉这个进程,把上面代码注掉只保留读文件的流就能看出来count=0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式