2012-09-14 18 views
5

संभव डुप्लिकेट:
PrintWriter and PrintStream never throw IOExceptionsजावा: प्रिंटवाइटर या प्रिंटस्ट्रीम कक्षाएं अपवाद क्यों नहीं फेंकती हैं?

हो सकता है कि प्रश्न थोड़ा "अजीब" है। लेकिन मुझे यह जानकर उत्सुकता है कि PrintWriter और PrintStream स्वचालित रूप से रनटाइम अपवादों की जांच क्यों न करें, और वे एक चेकइरर() विधि प्रदान करते हैं।

सभी को अग्रिम धन्यवाद।

उत्तर

5

प्रिंटस्ट्रीम के लिए जो अक्सर स्टडी आउट या गलती के लिए लिख रहा है, ये स्ट्रीम बंद या त्याग हो सकती है लेकिन आप नहीं चाहते कि प्रोग्राम परिणामस्वरूप अप्रत्याशित रूप से विफल हो।

प्रिंटवाइटर प्रिंटस्ट्रीम के लेखक संस्करण के कई तरीकों से है, हालांकि मुझे यकीन नहीं है कि प्रिंटस्ट्रीम की गलतियों को दोहराना एक अच्छा विचार था। ;)

तथ्य प्रिंटवाइटर रिपोर्ट नहीं करता है IOException इसे सॉकेट में टेक्स्ट लिखने के लिए एक खराब विकल्प बनाता है जहां आपको अक्सर यह पता होना चाहिए कि कनेक्शन विफल हो गया है।

1

मुझे लगता है कि यह मुख्य रूप से है क्योंकि System.err एक प्रिंटस्ट्रीम है।

जब आप कैच ब्लॉक में अपवादों को संभालने में कामयाब होते हैं, तो e.printStackTrace() को कॉल करना आम है और यह System.err को लिखता है। अगर उस कॉल ने अपवाद फेंक दिया है, तो आप मूल अपवाद खो देंगे और इसके बजाय आपके कोड से प्रिंटस्ट्रीम त्रुटि फेंक दी जाएगी। इसके बाद आपको उस समस्या को रोकने के लिए अपने पकड़ ब्लॉक के अंदर एक अतिरिक्त प्रयास/पकड़ की आवश्यकता होगी, जो एक बड़ी गड़बड़ी करता है।

ध्यान दें कि जेडीके 1.7 कैच ब्लॉक से अपवाद फेंकने की समस्या को संबोधित करता है, और आपको दोनों अपवादों तक पहुंचने की अनुमति देता है।

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