import java.io.*;
class Q implements Serializable
{
private static int i=100;
public Q()
{
}
public Q(int i)
{
this.i=i;
}
public String toString()
{
return String.valueOf(i);
}
public  int getI()
{
return i;
}
}
public class qdb
{
public static void main(String[] args)throws Exception
{
ByteArrayOutputStream b=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(b);
out.writeObject(new Q(100));
out.close();
ByteArrayInputStream bb=new ByteArrayInputStream(b.toByteArray());
ObjectInputStream in=new ObjectInputStream(bb);
Object o=in.readObject();
if(Q.class.isInstance(o))
{
Q q=(Q)o;
System.out.println(q.getI());
}
}
}
申明为static与transient字段是无法被序列化的,那为何这么输出i还是100呢,但把static换为transient就输出为0了~

解决方案 »

  1.   

    private static int i=100; 这个属性是类的属性不用序列化 也是这个值
      

  2.   

    out.writeObject(new Q(666));  //换个数试才行
      

  3.   

    static可以
    transient不可以吧。transient本来就用一下的吗。
      

  4.   

    我刚才测试出结果了,这个因为放在一个文件里的~由于是static,所以测试受到了影响。
    接着我分为2个类,放在2个包里面,发现static与transient都无法被序列化,还是谢谢大家了哈,散分!嘎嘎~
      

  5.   

    回7楼,THINKING书上明确说明 static与transient字段是无法被序列化的哦~