हां, कंस्ट्रक्टर्स को Java में अपवाद फेंकने की अनुमति है।
एक कंस्ट्रक्टर एक विशेष प्रकार का मेथड है जिसका उपयोग ऑब्जेक्ट को इनिशियलाइज़ करने के लिए किया जाता है और इसका उपयोग new कीवर्ड का उपयोग करके क्लास का ऑब्जेक्ट बनाने के लिए किया जाता है, जहां एक ऑब्जेक्ट को क्लास के इंस्टेंस के रूप में भी जाना जाता है। क्लास के प्रत्येक ऑब्जेक्ट की अपनी स्थिति (इंस्टेंस वेरिएबल्स) होती है और उसकी क्लास के मेथड्स तक पहुंच होती है।
कंस्ट्रक्टर से अपवाद फेंकना
- एक चेक्ड अपवाद का उपयोग इंस्टेंस बनाने का प्रयास करते समय एक वैध समस्या को इंगित करने के लिए किया जा सकता है, जबकि एक अनचेक्ड अपवाद आमतौर पर क्लाइंट कोड या कंस्ट्रक्टर में ही बग को इंगित करता है।
- दोनों मामलों में, एक ऑब्जेक्ट वास्तव में हीप स्पेस में अलॉट किया जाता है, लेकिन इसका रेफरेंस रिटर्न नहीं किया जाता। ऑब्जेक्ट आंशिक रूप से इनिशियलाइज़्ड स्थिति में रहता है जब तक कि यह गार्बेज कलेक्ट न हो जाए। इसलिए हम निष्कर्ष निकालते हैं कि कंस्ट्रक्टर से ऑब्जेक्ट का रेफरेंस सेव करना (this रेफरेंस का उपयोग करके) एक जोखिम भरा काम है, क्योंकि हम एक अमान्य स्थिति में ऑब्जेक्ट तक पहुंच दे सकते हैं।
- कंस्ट्रक्टर में अपवाद के बारे में ध्यान देने योग्य एक और महत्वपूर्ण बात रिफ्लेक्शन से संबंधित है। जब हमें खाली कंस्ट्रक्टर को क्लास ऑब्जेक्ट का उपयोग करके इनवोक करने की आवश्यकता होती है, उदाहरण के लिए test, हम कभी-कभी मेथड test.newInstance() का उपयोग करते हैं।
- कंस्ट्रक्टर्स द्वारा फेंका गया कोई भी अपवाद बिना किसी बदलाव के प्रोपगेट होता है। दूसरे शब्दों में, newInstance() मेथड चेक्ड अपवाद फेंक सकता है जिसे यह डिक्लेयर भी नहीं करता।
उदाहरण
public class ConstructorExceptionTest {
public ConstructorExceptionTest() throws InterruptedException {
System.out.println("Preparing an Object");
Thread.sleep(1000);
System.out.println("Object is ready");
}
public static void main(String args[]) {
try {
ConstructorExceptionTest test = new ConstructorExceptionTest();
} catch (InterruptedException e) {
System.out.println("Got interrupted...");
}
}
}
आउटपुट
Preparing an Object Object is ready