What is serialVersionUID in Java: Explanation and Example
serialVersionUID is a unique identifier for a Serializable class in Java that helps during the process of object serialization and deserialization. It ensures that a loaded class matches the serialized object version, preventing compatibility issues.How It Works
Imagine you save a snapshot of an object to a file, like taking a photo of a toy. Later, you want to load that toy back exactly as it was. In Java, this process is called serialization (saving) and deserialization (loading).
The serialVersionUID acts like a version tag on the toy's photo. When Java loads the saved object, it checks this tag to make sure the toy's design hasn't changed. If the tag doesn't match, Java knows the toy has changed and may refuse to load it to avoid errors.
If you don't set serialVersionUID yourself, Java creates one automatically based on the class details. But this automatic ID can change if you modify the class, causing problems when loading old saved objects.
Example
This example shows a simple class with a declared serialVersionUID. It demonstrates how to define it to keep serialization consistent.
import java.io.*; class Toy implements Serializable { private static final long serialVersionUID = 1L; String name; Toy(String name) { this.name = name; } public String toString() { return "Toy: " + name; } } public class Main { public static void main(String[] args) { Toy toy = new Toy("Car"); try { // Serialize the object FileOutputStream fileOut = new FileOutputStream("toy.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(toy); out.close(); fileOut.close(); // Deserialize the object FileInputStream fileIn = new FileInputStream("toy.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); Toy loadedToy = (Toy) in.readObject(); in.close(); fileIn.close(); System.out.println(loadedToy); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
When to Use
You should use serialVersionUID when your class implements Serializable and you expect to save and load objects, especially if the class might change over time.
Setting serialVersionUID manually helps avoid errors when deserializing objects saved with older versions of the class. This is common in applications that store data on disk, send objects over a network, or use caching.
Without it, even small changes in the class can cause InvalidClassException when loading old objects.
Key Points
- serialVersionUID is a unique version ID for a
Serializableclass. - It ensures compatibility between saved and loaded objects.
- Manually defining it prevents unexpected errors after class changes.
- If not defined, Java generates it automatically but it can change with class modifications.
- Use it in all classes that implement
Serializableand are stored or transferred.