这个在《Thinking in Java》中有很详细的解释

解决方案 »

  1.   

    如果你将一个字段声明为volatile,则多线程将能访问此字段,而特定的编译器将防止最优化以使该字段能被适当的访问。定义为transient的字段值在对象串行化过程中将不被保存。
      

  2.   

    串行化一般占用很大空间
    声明为transient(瞬时变量)可防止被串行化被保存这也就为什么它叫瞬时变量
      

  3.   

    昨天我就问过一个样的问题呵
    我把答复粘给你一般情况下,序列化时会把所有field全部写到流(你可以当作文件来考虑)里,有时并不是所有field都是那么有用。
    打个比方吧!你的类中有一个method计算非常耗时,而每次计算的结果都是一样的,这时你可能会考虑以lazy的方式来计算,就是第一次用的时候才开始具体计算,然后,在类里用一个field把这个结果保存起来,这样程序的效率就会得到提高。OK,现在你要对这个类做序列化了,这个field是类的一部分,但保存它并没有什么太大的意义,即便反序列化之后再用到,无非就是再算一次就可以了。你决定不对这个field进行序列化,这时就是transient起作用的时候了,有了它,序列化时就不会把它夜写到流里。当然,反序列化时,也没有它什么事
      

  4.   

    那一个类中哪一部分是field?