जब आप एक धारावाहिक वस्तु को deserialize करने का प्रयास करते हैं, तो तंत्र को ऑब्जेक्ट का एक खाली उदाहरण बनाना होगा, और ऑब्जेक्ट को उस स्थिति में पुनर्स्थापित करने के लिए सदस्यों को भरना होगा जब यह धारावाहिक था। ऑब्जेक्ट का निर्माण पहली बार किया गया था जब एक धारावाहिक वस्तु का एक कन्स्ट्रक्टर बुलाया गया था, लेकिन निर्माता को deserialization के दौरान बुलाया नहीं जाता है, क्योंकि तकनीकी रूप से, आप वस्तु का निर्माण नहीं कर रहे हैं, बल्कि इसे पूर्व राज्य में पुनर्निर्माण कर रहे हैं। निर्माण और बाद में हेरफेर के किसी भी प्रभाव से ऑब्जेक्ट स्टेटस में पहले से ही शामिल होने की उम्मीद है।
जब भी आप किसी भी वर्ग का ऑब्जेक्ट बनाते हैं, जावा को सुपर क्लास के निर्माता और सुपर-सुपर-क्लास इत्यादि को कॉल करना होगा। आप super(...)
का उपयोग कर सुपर क्लास के लिए एक विशिष्ट कन्स्ट्रक्टर निर्दिष्ट कर सकते हैं या यदि आप डॉन करते हैं एक सुपर कन्स्ट्रक्टर निर्दिष्ट नहीं है, डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जाएगा। एक तरफ या दूसरा, जड़ के सभी वर्गों का निर्माण किया जाता है।
serlializable वस्तुओं की Deserialization निर्माता मंगलाचरण का कारण नहीं है, लेकिन जब वहाँ एक सुपर वर्ग कि serializable नहीं है, है तो उस वर्ग की उम्मीद नहीं है (कि तुम एक serializable वर्ग के साथ एक गैर serializable वर्ग का विस्तार है) deserialized हो, और इसके सदस्यों को भंडार/बहाल करने के लिए कोई तंत्र नहीं है। यदि सुपर क्लास धारावाहिक नहीं है, तो deserialization तंत्र को यह सुनिश्चित करने के लिए शून्य-तर्क कन्स्ट्रक्टर को कॉल करने की आवश्यकता है कि पुनर्निर्मित ऑब्जेक्ट इंस्टेंस सही ढंग से प्रारंभ किया गया हो।
यदि आप शून्य-तर्क कन्स्ट्रक्टर निर्दिष्ट करने में विफल रहते हैं, तो deserialization कोड आपको इस समस्या के बारे में चेतावनी नहीं देगा जब तक कि उस वर्ग की किसी ऑब्जेक्ट को deserialize करने का आपका प्रयास न हो। संकलन समय पर कोई चेतावनी नहीं है।
इसके अलावा, आपके serializable subclass को गैर-धारावाहिक सुपर क्लास से किसी भी सदस्य मान को संग्रहीत/बहाल करने की ज़िम्मेदारी लेनी चाहिए।
देखें http://www.jguru.com/faq/view.jsp?EID=251942 – GKislin