java - System.out.println()और System.err.println()के बीच अंतर




(7)

Java में System.out.println() और System.err.println() बीच अंतर क्या है?


Answers

वे कमांड विभिन्न आउटपुट स्ट्रीम का उपयोग करते हैं। डिफ़ॉल्ट रूप से दोनों संदेश कंसोल पर मुद्रित किए जाएंगे, लेकिन उदाहरण के लिए इन दोनों को एक फ़ाइल में पुनर्निर्देशित करना संभव है।

java MyApp 2>errors.txt

यह System.err को errors.txt से errors.txt । फ़ाइल में।


यह उत्तर शायद सबसे आसान मदद करता है यह इतना आसान है। System.err और System.out दोनों समान हैं जो दोनों System क्लास में परिभाषित हैं जैसे कि PrintStream वर्ग के संदर्भ चर के रूप में public final static PrintStream out = null; और public final static PrintStream err = null;

दोनों रेफ हैं। PrintStream वर्ग का चर। सामान्य रूप से System.err का उपयोग त्रुटि संदेशों को प्रिंट करने के लिए किया जाता है, जो प्रोग्रामर के लिए रीडेबिलिटी को बढ़ाता है।

जब हम रिडायरेक्शन ऑपरेटर के साथ काम कर रहे होते हैं तो दोनों में मामूली अंतर आता है।



Java System.out.println() आपके द्वारा उपयोग किए जा रहे सिस्टम में से मानक प्रिंट होगा। दूसरी ओर, System.err.println() मानक त्रुटि पर प्रिंट होगा।

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

इसके अलावा, आईडीई जैसे ग्रहण लाल पाठ में System.err दिखाते हैं और डिफ़ॉल्ट रूप से काले पाठ में System.out


System.out "मानक आउटपुट" (stdout) है और System.err "त्रुटि आउटपुट" (stderr) है। System.in (stdin) के साथ, ये Unix मॉडल में तीन मानक I / O स्ट्रीम हैं। अधिकांश आधुनिक प्रोग्रामिंग वातावरण (C, पर्ल, आदि) इस मॉडल का समर्थन करते हैं।

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

मान लीजिए कि आपके पास एक सरल प्रोग्राम है जहां आप एक फ़ोन नंबर दर्ज करते हैं और यह उस व्यक्ति को प्रिंट करता है जिसके पास वह नंबर है। यदि आप एक अमान्य संख्या दर्ज करते हैं, तो प्रोग्राम को आपको उस त्रुटि के बारे में सूचित करना चाहिए, लेकिन ऐसा नहीं होना चाहिए जैसे कि उत्तर : यदि आप "999-ABC-4567" दर्ज करते हैं और कार्यक्रम एक त्रुटि संदेश प्रिंट करता है "एक वैध संख्या नहीं" , इसका मतलब यह नहीं है कि "नॉट ए वैलिड नंबर" नाम का एक व्यक्ति है जिसकी संख्या 999-ABC-4567 है। इसलिए यह मानक आउटपुट के लिए कुछ भी प्रिंट नहीं करता है, और त्रुटि आउटपुट पर संदेश "एक वैध संख्या नहीं" मुद्रित होता है।


System.out.println("wassup"); यह दर्शाता है कि आपको उपयोगकर्ता द्वारा दिए गए उचित इनपुट से संबंधित एक निश्चित परिणाम प्राप्त करना है जबकि System.err.println("duh, that's wrong); यह दिखाने के लिए एक संदर्भ है कि प्रदान किया गया इनपुट गलत है या कोई अन्य त्रुटि है। ।

अधिकांश IDE इसे लाल रंग ( System.err.print ) में दिखाते हैं।


चूंकि बहुत से लोगों ने सुझाव दिया है, संसाधन लीक काफी कारण हैं - जेडीबीसी उदाहरणों की तरह। वास्तविक मेमोरी लीक थोड़ा कठिन हैं - खासकर यदि आप JVM के टूटी बिट्स पर निर्भर नहीं हैं तो यह आपके लिए ...

ऑब्जेक्ट्स बनाने के विचार जिनके पास बहुत बड़ा पदचिह्न है और फिर उन्हें एक्सेस करने में सक्षम नहीं हैं, वे वास्तविक स्मृति लीक नहीं हैं। यदि कुछ भी इसका उपयोग नहीं कर सकता है तो यह कचरा इकट्ठा किया जाएगा, और यदि कुछ इसका उपयोग कर सकता है तो यह एक रिसाव नहीं है ...

एक तरीका जो काम करने के लिए प्रयोग किया जाता था - और मुझे नहीं पता कि यह अभी भी करता है - एक तीन-गहरी परिपत्र श्रृंखला है। ऑब्जेक्ट ए में ऑब्जेक्ट बी का संदर्भ है, ऑब्जेक्ट बी में ऑब्जेक्ट सी का संदर्भ है और ऑब्जेक्ट सी के पास ऑब्जेक्ट ए का संदर्भ है। जीसी यह समझने के लिए पर्याप्त चालाक था कि एक दो गहरी श्रृंखला - जैसे कि <-> B - सुरक्षित रूप से एकत्र किया जा सकता है यदि ए और बी किसी और चीज से सुलभ नहीं हैं, लेकिन तीन-तरफा श्रृंखला को संभाल नहीं सकते ...







java println system.out system.err