谁讲讲,谢谢!

解决方案 »

  1.   

    static是类共享的,当该类一个对象被序列化后,这个static变量可能会被另一个对象改变,所以这决定了静态变量是不能序列化的,但如果是final,就可以,因为这是一个常量
      

  2.   

    Class类实现了Serializable接口,
    thinking中提到将Class对象序列化,能够存储static值.
    大家试过没?
      

  3.   

    默认的序列化静态变量是不参与的
    若是想序列化和反序列化静态变量,可以让被序列化的类实现wrieObject(ObjectOuputStream )
    readObject(ObjectInputStream )
    把静态变量写入到输出流中,可以从输入流中读入
      

  4.   

    我测试过,static定义的变量序列化好像不对呀
    一直不知道是什么原因
      

  5.   

    大家试下把Class的实例进行序列化和反序列化,看看结果如何啊(关注static).
      

  6.   

    谁能讲讲Class这个类?我觉得这是关键.
      

  7.   

    import java.io.*;
    public class Customer3 implements Serializable {
      private static int count; //用于计算Customer3对象的数目
      private static final int MAX_COUNT=1000;
      private String name;
      private transient String password;
      
      static{
         System.out.println("调用Customer3类的静态代码块");
      }
      public Customer3(){
        System.out.println("调用Customer3类的不带参数的构造方法");
        count++;
      }
      public Customer3(String name, String password) {
        System.out.println("调用Customer3类的带参数的构造方法");
        this.name=name;
        this.password=password;
        count++;
      }  /** 加密数组,将buff数组中的每个字节的每一位取反 
       *  例如13的二进制为00001101,取反后为11110010
       */
      private byte[] change(byte[] buff){
        for(int i=0;i<buff.length;i++){
          int b=0;
          for(int j=0;j<8;j++){
            int bit=(buff[i]>>j & 1)==0 ? 1:0;
            b+=(1<<j)*bit;
          }
          buff[i]=(byte)b;
        }
        return buff;
      }  private void writeObject(ObjectOutputStream stream)throws IOException {
        stream.defaultWriteObject();  //先按默认方式序列化 
        stream.writeObject(change(password.getBytes()));
        stream.writeInt(count);
      }  private void readObject(ObjectInputStream stream)
              throws IOException, ClassNotFoundException {
        stream.defaultReadObject();  //先按默认方式反序列化
        byte[] buff=(byte[])stream.readObject();
        password = new String(change(buff));
        count=stream.readInt();
      }  public String toString() {
        return "count="+count
               +" MAX_COUNT="+MAX_COUNT
               +" name="+name
               +" password="+ password;
      }
    }
      

  8.   

    en,楼上说的是一种解决方法.
    先谢谢.其实我很想知道将Class的实例反序列化时的处理.比如
    out.writeObject(Customer3.class);...in.readObject();
    core java中提到虚拟机确保系统中对不同class,都只有一个Class的实例.
    那上面的in.readObject()执行之后系统做了哪些操作?