按照视频里的讲解序列化是对对象而言的,是将堆内存中的数据写到硬盘上,方法区中的共享数据和方法不会被序列化
但是下边的程序却让我得出疑问。
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 wenwen {
public static void main(String[] args)throws Exception
{
writeObj();
readObj();
}
public static void writeObj()throws IOException
{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("abc.object"));
oos.writeObject(new Person("lili",23,"cn"));
oos.close();
}
public static void readObj()throws Exception
{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("abc.object"));
Person p = (Person)ois.readObject();
System.out.println(p);
ois.close();
}
}
class Person implements Serializable
{
String name;
transient int age; //被transient修饰后age不能被序列化了,所以读取出来后打印结果应为0
static String country; //静态的也不能被序列化,因为存在于方法区中,所以读取后打印结果应为null
Person(String name,int age,String country)
{
this.name=name;
this.age=age;
this.country=country;
}
public String toString()
{
return(name+".."+age+".."+country);
}
}
打印结果如下:
lili..0..cn
很明显被transient修饰的age没被序列化,打印出0,但是country被static修饰了,也不能被序列化,应打印出null,
但结果却打印出cn了,那就是被序列化了,这是怎么回事?
|