2012-10-18 18 views
8

एक प्रयोग के रूप में, मैंने ग्रहण डीबगर में निम्नलिखित ब्रेकपॉइंट को सक्षम करने का निर्णय लिया: Throwable [Include Subclasses]: caught and uncaught। मैं फिर अपना कोड (जो मुझे पता है "ठीक" चल रहा है) डीबगर के तहत चलाया जाता है, और मुझे आश्चर्य हुआ कि मानक कोड जे 2 एसई लाइब्रेरी कोड द्वारा दर्जनों अपवादों को फेंक दिया गया और पकड़ा गया (पहले मुझे अज्ञात) जब मेरा कोड था मुझे पता है कि सामान्य रूप से चल रहा है।क्या जावा लाइब्रेरी कोड "सामान्य" प्रसंस्करण के दौरान कई अपवादों को फेंकने और पकड़ने के लिए सामान्य है?

उदाहरण के लिए, यहां कुछ जावा फ्रेमवर्क फ़ंक्शंस हैं जिन्हें मैंने अपवाद फेंक दिया: URLClassLoader.findClass, FileDirContext.lookup, और WebappClassLoader.findClassInternal

क्या यह जावा एप्लिकेशन के लिए सामान्य व्यवहार माना जाता है? क्या यह कुछ मुझे देखना चाहिए? मुझे लगता है कि मेरा कोड ठीक चल रहा है।

+1

ये सभी उचित उचित: अपवाद तब होते हैं जब एक प्राथमिक (या * एन * - सामान्य में) पुनर्प्राप्ति तंत्र विफल हो जाता है और शायद इसे माध्यमिक (या (* एन + 1 *) - सामान्य रूप से आर्य की कोशिश करके संभाला जाता है) तंत्र । –

+1

आपको आंतरिक रूप से क्या कर रहा है इसके बारे में चिंता करने के बजाय विधियों पर विनिर्देश (दस्तावेज़ीकरण) का पालन करना चाहिए। उस प्रकार का शोध केवल तभी जरूरी है जब लागूकरण विनिर्देश के अनुसार अपेक्षित व्यवहार न करे। –

+0

यह एक बहुत अच्छा सवाल है, और मुझे लगता है कि उत्तर उन विशिष्ट अपवादों पर निर्भर करता है जिन्हें फेंक दिया जा रहा है। आम तौर पर, अंगूठे के नियम के रूप में, अपवादों को पकड़ने पर भरोसा करने के लिए अपने कोड को डिज़ाइन करना एक बुरा अभ्यास है क्योंकि अपवाद महंगे होते हैं। एक अच्छा पठन: http://www.ibm.com/developerworks/java/library/j-jtp05254/index.html – alfasin

उत्तर

0

कक्षा-लोडिंग के दौरान फेंकने वाले अपवाद जावा इतिहास के शुरुआती दिनों से अवशोषित होते हैं जब कक्षा लोडिंग को उन तरीकों के रूप में उपयोग करने के लिए डिज़ाइन किया गया था, जो कुछ वर्ग-लोडर को कक्षा में नहीं मिल पा रहे थे। इसे अब एक अच्छा पैटर्न नहीं माना जाता है लेकिन यह वहां रहता है और संभवतया इसे कभी नहीं बदला जाएगा क्योंकि यह एपीआई का हिस्सा है। डरने के लिए कुछ भी नहीं।

2

हालांकि इस तरह से आपके कोड को डिजाइन करना बुरा है (अपवाद धीमा है, और असाधारण परिस्थितियों के लिए उपयोग किया जाना चाहिए), भेश गुरुंग की टिप्पणी इस बारे में सोचने का सही तरीका है। जिस कोड पर आप भरोसा कर रहे हैं उसके विनिर्देश का पालन करें, और कार्यान्वयन के बारे में चिंता न करें।

+0

तर्कसंगत रूप से, यह ** एक असाधारण परिस्थिति ** है जब अनुरोधित संसाधन की लोडिंग विफल हो जाती है। यह चेक अपवादों के उपयोग के मामले की बिल्कुल परिभाषा है: ** अपेक्षित **, लेकिन ** असाधारण ** परिस्थितियों। –

संबंधित मुद्दे