Java Object Serialization, introduced as part of the ground-breaking feature set that made up JDK 1.1. It serves as a mechanism to transform a graph of Java objects into an array of bytes for storage or transmission, such that the converted array of bytes can be later transformed back into a graph of Java objects. The idea of Serialization is to freeze the object graph, move the graph around (to disk, across a network or whatever), and then gain the graph back out again into usable Java objects. Your Java class just needs to implement java.io.Serializable interface and JVM will take care of serializing object in default format. Decision to making a Class Serializable should be taken concisely because though near term cost of making a Class Serializable is low, long term cost is substantial and it can potentially limit your ability to further modify and change its implementation because like any public API, serialized form of an object becomes part of public API and when you change structure of your class by implementing addition interface, adding or removing any field can potentially break default serialization, this can be minimized by using a custom binary format but still requires lot of effort to ensure backward compatibility. (Q & N)What is serialVersionUID? What would happen if you don't define this? SerialVersionUID is an ID which is stamped on object when it get serialized usually hashcode of object, you can use tool serialver to see serialVersionUID of a serialized object . SerialVersionUID is used for version control of object. you can specify serialVersionUID in your class file also. Consequence of not specifying serialVersionUID is that when you add or modify any field in class then already serialized class will not be able to recover because serialVersionUID generated for new class and for old serialized object will be different. Java serialization process relies on correct serialVersionUID for recovering state of serialized object and throws java.io.InvalidClassException in case of serialVersionUID mismatch. If you don't want any field to be part of object's state then declare it either static or transient based on your need and it will not be included during Java serialization process. If you try to serialize an object of a class which implements Serializable, but the object includes a reference to an non- Serializable class then a ?NotSerializableException? will be thrown at run time.