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
有做过类似试验的吗?你们也觉得静态变量不能序列化吗? 展开
如
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
有做过类似试验的吗?你们也觉得静态变量不能序列化吗? 展开
3个回答
展开全部
测试一下先。。这个没整过
果然不可以序列化。。是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;
}
}
展开全部
静态变量不属于对象,属于类。不能被序列化。还有瞬态的变量也不能被序列化 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个程序是在一个jvm进程中的,所以反序列化出对象以后,stu对象还是会去方法区中找静态变量的值。你关掉这个进程,把上面代码注掉只保留读文件的流就能看出来count=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询