java serialization static transient

Reglas de serialización estática de Java



serialization static (5)

Estoy trabajando en una serialización de estado de guardado con algunos métodos y campos estáticos. Podría haber jurado que la serialización y el caos causado por la estática. ¿Debería hacer que todo estático sea transitorio? ¿Y al inflar las llamadas restablecerás la estática como es normal?



static campos static no están serializados.


static campos static se ignoran para la serialización.

Se actualizó para decir static lugar de transient como originalmente pretendí ...


static son implícitamente transient , por lo que no es necesario que las declare como tales.

La serialización es para serializar instancias , no clases . static campos static (los métodos son irrelevantes ya que son parte de la definición de la clase para que no estén serializados) se reiniciarán a cualquier valor al que estén configurados cuando se cargue la clase.

Si tiene un campo static mutable, los cambios realizados en ese valor se perderán.


Las reglas cortas pueden ser las siguientes:

1. static variable static no se guarda durante la serialización. Y, por el contrario, durante el proceso de deserialización, las variables static se inician desde la inicialización del nivel de clase.

2. Las variables basadas en palabras clave static y transient se ignoran durante la serialización.

3. El nombre de clase y el serialVersionUID se serializan como una secuencia de bytes y, cuando se serialVersionUID , el serialVersionUID , leído de la fuente, se compara con la clase local de la misma variable static . Es por eso que serialVersionUID se declara como static public final lo que no es necesario crear más objetos para comparar estos ID de versión.

  • Si en caso de encontrar alguna diferencia, se produciría una InvalidClassException .