Java - private static final long serialVersionUID = 1L;

 
Vista:

private static final long serialVersionUID = 1L;

Publicado por Manolo (4 intervenciones) el 11/09/2006 19:29:02
Hola !!!

Buenas tardes.

Estoy empezando con JAVA y he intentado hacer mi primer applet, utilizando eclipse. Y me da un error.

Pero le he añadido "private static final long serialVersionUID = 1L; " y me funciona, pero no se que significa ni para que sirve. ¿Alguien me lo puede decir?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:private static final long serialVersionUID = 1L

Publicado por Oscar (1 intervención) el 12/11/2007 17:14:51
Eso es porque la clase Applet implementa el interfaz Serializable. Las clases que implementan este interfaz son susceptibles de ser serializadas (es decir, las instancias de estas clases pueden guardarse y leerse en/de disco -o cualquier otro dispositivo de entrada/salida-).

Simplificando mucho la lógica de serialización, lo que sucede es que los atributos del objeto se convierten en cadenas de bytes y se guardan en el disco. Para leer un objeto, se leen las cadenas de bytes y se reconstruye el objeto a partir de ellos.

Imagina que tienes una aplicación que serializa en disco una serie de objetos al cerrarse y los lee en la siguiente ejecución para mantener los valores que tenían antes. En un momento dado, modificas una de las clases añadiendo un atributo nuevo. Al ejecutar esta versión de la aplicación por primera vez, intentará leer de disco los objetos que fueron serializados... pero falta un campo en los objetos de la clase que has modificado (cuando se serializaron el campo no existia) y tu aplicación "teóricamente" va a leer datos corruptos puesto que "teóricamente" no puede saber que la clase ha cambiado (veremos que si puede saberlo).

El campo serialVersionUID es el número de versión de la clase. Cuando el objeto es serializado lo primero que hace es escribir el serialVersionUID. Si al leer el objeto se dectecta que el valor del serialVersionUID guardado no coincide con el actual se lanza una exception InvalidClassException, de modo que el programador puede tratar la excepción de manera adecuada (por ejemplo, creando un objeto por defecto para susbtituir al que no puede leerse).

Para que este mecanismo funcione bien, el programador debe proveer el campo private static final long serialVersionUID en todas las clases que implementen Serializable y en todas las subclases de ellas (este es tu caso). El valor es indiferente, pero debes actualizarlo cada vez que modificas tu clase añadiendo o quitando atributos (lo más sencillo en incrementarlo en 1). Si el programador no indica este campo la JVM añade uno por su cuenta, sin embargo no es demasiado conveniente permitir esto (al cambiar ligeramente el programa o cambiar la JMV podría cambiar el valor y darte una desagradable sorpresa)

Realmente esto no es necesario si no vas a serializar los objetos... pero como nunca se sabe, no es mala idea que proveas este valor y lo mantengas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar

RE:private static final long serialVersionUID = 1L

Publicado por Dave (1 intervención) el 14/07/2011 10:06:53
Si pudiera darte puntos, te daria 100 por la gran respuesta. ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Maestro!!!

Publicado por ale marchena (1 intervención) el 05/05/2013 15:35:53
Gracias por la explicación, excelente y concreto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:private static final long serialVersionUID = 1L

Publicado por Gian Franco (1 intervención) el 05/01/2015 17:57:48
Buena explicación en verdad me has ayudado mucho (y).! gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:private static final long serialVersionUID = 1L

Publicado por julio (1 intervención) el 18/06/2016 02:07:48
excelente explicacion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:private static final long serialVersionUID = 1L

Publicado por jorge jimenez (1 intervención) el 12/01/2008 17:35:43
sirve para definir un id que sera usado por la virtual machine cuando serializa y deserealiza el applet se refiere a la definicion de JavaBeans
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar