Je travaille sur une sérialisation de l'état de sauvegarde avec quelques méthodes et champs statiques. J'aurais pu jurer que cette sérialisation et cet effet statique causaient un chaos. Devrais-je faire tous les transitoires de statique? Et gonfler les appels restaurera-t-il la statique normalement?
static
s sont implicitement transient
, vous n'avez donc pas besoin de les déclarer comme tels.
La sérialisation sert à la sérialisation instances , pas classes . Les champs static
(les méthodes ne sont pas pertinentes car elles font partie de la définition de la classe et ne sont donc pas sérialisées) seront réinitialisées à la valeur définie lors du chargement de la classe.
Si vous avez un champ mutable static
, les modifications apportées à cette valeur seront perdues.
Les règles courtes peuvent être les suivantes:
1. Les variables static
ne sont pas enregistrées lors de la sérialisation. Et au contraire, lors du processus de dé-sérialisation, les variables static
sont lancées à partir de l'initialisation au niveau classe.
2. Les variables basées sur les mots clés static
et transient
sont ignorées pendant la sérialisation.
3. Le nom de classe et serialVersionUID
sont tous deux sérialisés en tant que flux d'octets et, lorsqu'ils sont désérialisés, la serialVersionUID
, lue à partir du source, est comparée à la classe locale de même variable static
. C'est pourquoi serialVersionUID
est déclaré en tant que static public final
, de sorte qu'aucun objet supplémentaire ne doit être créé pour comparer ces versionUID (s).
Les champs static
sont ignorés pour la sérialisation.
Mis à jour pour dire static
plutôt que transient
comme je l'avais initialement prévu ...
Les champs static
ne sont pas sérialisés.
Les champs statiques ne peuvent jamais faire partie du fichier "ser". Statique + transitoire est identique à transitoire.
"Lorsque vous sérialisez une instance d'une classe, les seules choses sauvegardées sont les données d'instance non statiques et non transitoires. Les définitions de classe ne sont pas enregistrées. Elles doivent être disponibles lorsque vous essayez de désérialiser un objet" http: //Java.Sun.com/developer/technicalArticles/ALT/serialization/