Serialization and Deserialization in Java
Serialization in java is a mechanism of writing the state of an object into a byte stream and deserialization is the process of converting a stream of bytes back into a copy of the original object. A Java object is serializable if its class or any of its superclasses implements either the java.io.Serializable interface or its subinterface, java.io.Externalizable.
The Serializable interface is a "marker" interface. This means that it has no methods or fields, but simply "marks" a class as being able to be serialized. When the Java Virtual Machine (JVM) encounters a class that is "marked" as Serializable during a serialization process, the Virtual Machine will assume that it is safe to write to the stream. These all happens somewhat automatically for a programmer. Following are the well-known Marker Interfaces.
Serializing an Object
Deserialization of Object
Serialization and Variables
These variables are serialized, so during deserialization we will get back the serialized state.
These variables are not serialized, So during deserialization static variable value will loaded from the class. But, any static variable that is provided a value during class initialization is serialized . However in usual cases, where you would provide the value to a static variable at the main class at run-time would not be serialized.
Transient variables are not serialized, so during deserialization those variables will be initialized with corresponding default values.
Super class variables:
If super class also implemented Serializable interface then those variables will be serialized, otherwise it won't serialize the super class variables. While deserializing , Java Virtual Machine (JVM) will run default constructor in super class and populates the default values. Same thing will happen for all superclasses.