एक प्रयोग के रूप में, मैंने ग्रहण डीबगर में निम्नलिखित ब्रेकपॉइंट को सक्षम करने का निर्णय लिया: Throwable [Include Subclasses]: caught and uncaught
। मैं फिर अपना कोड (जो मुझे पता है "ठीक" चल रहा है) डीबगर के तहत चलाया जाता है, और मुझे आश्चर्य हुआ कि मानक कोड जे 2 एसई लाइब्रेरी कोड द्वारा दर्जनों अपवादों को फेंक दिया गया और पकड़ा गया (पहले मुझे अज्ञात) जब मेरा कोड था मुझे पता है कि सामान्य रूप से चल रहा है।क्या जावा लाइब्रेरी कोड "सामान्य" प्रसंस्करण के दौरान कई अपवादों को फेंकने और पकड़ने के लिए सामान्य है?
उदाहरण के लिए, यहां कुछ जावा फ्रेमवर्क फ़ंक्शंस हैं जिन्हें मैंने अपवाद फेंक दिया: URLClassLoader.findClass
, FileDirContext.lookup
, और WebappClassLoader.findClassInternal
।
क्या यह जावा एप्लिकेशन के लिए सामान्य व्यवहार माना जाता है? क्या यह कुछ मुझे देखना चाहिए? मुझे लगता है कि मेरा कोड ठीक चल रहा है।
ये सभी उचित उचित: अपवाद तब होते हैं जब एक प्राथमिक (या * एन * - सामान्य में) पुनर्प्राप्ति तंत्र विफल हो जाता है और शायद इसे माध्यमिक (या (* एन + 1 *) - सामान्य रूप से आर्य की कोशिश करके संभाला जाता है) तंत्र । –
आपको आंतरिक रूप से क्या कर रहा है इसके बारे में चिंता करने के बजाय विधियों पर विनिर्देश (दस्तावेज़ीकरण) का पालन करना चाहिए। उस प्रकार का शोध केवल तभी जरूरी है जब लागूकरण विनिर्देश के अनुसार अपेक्षित व्यवहार न करे। –
यह एक बहुत अच्छा सवाल है, और मुझे लगता है कि उत्तर उन विशिष्ट अपवादों पर निर्भर करता है जिन्हें फेंक दिया जा रहा है। आम तौर पर, अंगूठे के नियम के रूप में, अपवादों को पकड़ने पर भरोसा करने के लिए अपने कोड को डिज़ाइन करना एक बुरा अभ्यास है क्योंकि अपवाद महंगे होते हैं। एक अच्छा पठन: http://www.ibm.com/developerworks/java/library/j-jtp05254/index.html – alfasin