Java static serialization rules?

前端 未结 6 2111
再見小時候
再見小時候 2020-11-28 08:22

I\'m working on a save state serialization with a few static methods and fields. I could have sworn though that serialization and static\'s caused mayhem. Should I make all

相关标签:
6条回答
  • 2020-11-28 09:00

    static fields aren't serialized.

    0 讨论(0)
  • 2020-11-28 09:02

    Static fields can never be a part of "ser" file. Static + transient is the same as transient.

    0 讨论(0)
  • 2020-11-28 09:07

    static fields are ignored for serialization.

    Updated to say static rather than transient as I originally intended...

    0 讨论(0)
  • 2020-11-28 09:18

    statics are implicitly transient, so you don't need to declare them as such.

    Serialization is for serializing instances, not classes. static fields (methods are irrelevant since they are part of the class definition so they aren't serialized) will be reinitialized to whatever value they are set to when the class is loaded.

    If you have a mutable static field, then the changes made to that value will be lost.

    0 讨论(0)
  • 2020-11-28 09:21

    "When you serialize an instance of a class, the only things that are saved are the non-static and non-transient instance data. Class definitions are not saved. They must be available when you try to deserialize an object" http://java.sun.com/developer/technicalArticles/ALT/serialization/

    0 讨论(0)
  • 2020-11-28 09:23

    The short rules can be as follows:

    1. static variable are not saved during serialization. And on the contrary, during de-serialization process, the static variables are initiated from the class level initialization.

    2. static and transient keywords based variables are both ignored during serialization.

    3. Class name and serialVersionUID are both serialized as stream of bytes and when de-serialized the serialVersionUID , read from the source, is compared with local class same static variable. That is why serialVersionUID is declared as static public final so that no further object needs to be created for comparing these versionUID(s).

    • If in case any difference is found, then a InvalidClassException would occur.
    0 讨论(0)
提交回复
热议问题