新手求教,Java1.8中静态可以序列化了吗?

qqqq72858 2016-05-21 09:47:48
自学学到ObjectInputStream和ObjectOutputStream
老毕说到类中的静态无法序列化,而他的演示也确实如此
但是我在自己写的时候蛋疼的发现静态的国籍属性被序列化了。。。。。

打印显示:
李元霸:::0===kc
李建成:::0===kc

求问这是1.8的新特性吗?还是我写错了?
请无视对异常选择了throws而不是try
新人百度无果,求各位大神指教,先行拜谢!!!!
package day21;
import java.io.*;
public class ObjectStreamDemo {
public static void main(String[] args)throws Exception
{
writeObj();
readObj();
}

public static void readObj()throws Exception
{
//写入的是对象,读取的时候就要用对应的对象读取流
ObjectInputStream oip = new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt"));
//oip.readObject();//这里会抛出ClassNotFoundException异常,返回值类型是Object

System.out.println((Person)oip.readObject());
System.out.println((Person)oip.readObject());
oip.close();
}

public static void writeObj()throws IOException
{
ObjectOutputStream oop = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\a.txt"));


oop.writeObject(new Person("李元霸",18,"mb"));
oop.writeObject(new Person("李建成",26,"kc"));
oop.flush();
oop.close();
System.out.println("over");
}
}

//这里的自定义类如果想要被序列化需要实现一个接口
class Person implements Serializable
{
//类实现了Serializable之后会的到一个序列号,这个序列号根据类中的内容算出来的,所以类中的内容一旦发生改变,序列号就变了
//所以这时我们需要自己定义一个序列号来取代java自动分配的序列号
public static final long serialVersionUID = 42L;
//给出自定义的序列号之后,就算改变类中的内容,Object流也能识别了
private String name;
//对与非静态的怎样让其不能序列化?
//加上关键字transient
transient int age;
//注意:静态不能被序列化,序列化是将堆内的数据序列话,而静态在方法区里面....1.8貌似可以了
static String country="cn";
Person(String name,int age,String country)
{
this.name=name;
this.age=age;
this.country=country;
}
public String toString()
{
return name+":::"+age+"==="+country;
}
}
...全文
104 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqqq72858 2016-05-22
  • 打赏
  • 举报
回复
是我自己运行时候出了问题
scmod 2016-05-21
  • 打赏
  • 举报
回复
没试过...不行吗?那static final的序列号为啥可以....

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧