- import java.io.Serializable;
- public class Person implements Serializable {
- static final long serialVersionUID = 42L;
- String name;
- transient int age;
- static String cn = "haha";
- Person(String name,int age,String cn){
- this.name = name;
- this.age = age;
- this.cn = cn;
-
- }
- public String toString(){
- return this.name+" "+age+" : "+cn;
- }
- }
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInput;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- public class ObjectTest {
- /**
- * @param args
- */
- public static void main(String[] args)throws Exception {
- // TODO Auto-generated method stub
- writeObj();//1 -----这里先注释掉2,然后单独运行1,出的结果和1、2都不注释出的结果是不一样的。
- readObj();//2
- }
- public static void readObj() throws FileNotFoundException, IOException, ClassNotFoundException{
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.object"));
- Object obj = ois.readObject();
- System.out.println(obj.toString());
- ois.close();
-
- }
- public static void writeObj() throws Exception{
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.object"));
- oos.writeObject(new Person("lisi",34,"china"));
- oos.close();
- }
- }
- 想知道同样是不能被序列化,static成员和被transient修饰有哪里不同,它们在写入和读取的时候在内存中是怎么变化的。
- 为什么Person里面改成 transient static int age;就可以打印出34岁来。不加static打印的就是0岁,
- 成员被序列化的时候
- 用static
- transient
- 和transient static 分别修饰有什么不同呢?
- 先后运行writeObj()和readObj()和在一个程序同时运行这两个方法又有什么区别呢?结果为什么不同?
复制代码 |