2012-04-01 8 views
9

पर पकड़ने का प्रयास करें क्या इसे अंतिम प्रोग्रामिंग में कोशिश करने और पकड़ने के लिए खराब प्रोग्रामिंग माना जाता है?आखिर में अनुभाग

मैं अपनी मुख्य विधि में एक फ़ाइल इनपुटपुट स्ट्रीम कर रहा हूं जिसे मैं बंद करना चाहता हूं। मैं अंत में .close() को रखना चाहता हूं, इसलिए इससे कोई फर्क नहीं पड़ता कि इससे कोई फर्क नहीं पड़ता। मैं मुख्य विधि में फेंकने की घोषणा नहीं करना चाहता, क्योंकि यह मुख्य विधि है: पी

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

क्या यह ठीक है? धन्यवाद

+8

हाँ यह ठीक है और कभी कभी आवश्यक है। –

+1

यदि आप अभी अपवाद को फिर से भरने जा रहे हैं तो आपको पकड़ने की आवश्यकता नहीं है। कोशिश पकड़ना जरूरी है क्योंकि आपको अपवाद के साथ कुछ करना है (कम से कम, इसे लॉगिंग करना), यदि आप तय नहीं करते हैं तो यह आवश्यक नहीं है। – SJuan76

+0

मुझे System.err और फिर System.exit पर कुछ प्रिंट करने की आवश्यकता है, यही है कि throwExcpetion (e) विधि –

उत्तर

9

आखिरकार विधियों में कोशिश/कैच की आवश्यकता के पैटर्न दुर्भाग्यवश जावा 6 और इससे पहले आवर्ती पैटर्न है। मैं तर्क दूंगा कि यह वास्तव में एक बुरा अभ्यास है, लेकिन ऐसा नहीं है कि आप वास्तव में जावा 6 से बच सकते हैं (जावा 7 के लिए नीचे देखें)।

एक अतिरिक्त समस्या यह है कि आखिरकार ब्लॉक में फेंकने वाले किसी भी नए अपवाद को इस ब्लॉक तक पहुंचने से पहले अपवादों को ओवरराइड कर दिया जाएगा।

जावा 7 में ऐसे मामलों के लिए विशेष रूप से उन मामलों के लिए जाना जाता है जहां संसाधनों को बंद करने की आवश्यकता होती है (कोशिश/आखिरकार/कोशिश/पकड़ने के लिए उपयोग के अधिकांश मामलों) नए प्रयासों के साथ-साथ संसाधनों का निर्माण। यह प्राथमिक और माध्यमिक अपवाद दोनों को भी कैप्चर करेगा।

इस संरचना का उपयोग करते हुए इस प्रकार अब JDK 7 में एक सबसे अच्छा अभ्यास है और हाँ, कोड आपको बताएंगे कि इस प्रकार जावा 7 में एक बुरा व्यवहार

+0

मुझे केवल जावा 6 का उपयोग करने के लिए बाध्य किया गया है। स्कूल ने अभी तक 7 की मंजूरी नहीं दी है। –

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