2012-05-27 15 views
8

System कक्षा में, in, out, और err स्थिर फ़ील्ड हैं।System.in को शून्य के बजाय nullInputStream() के रूप में क्यों घोषित किया गया है?

public final static InputStream in = nullInputStream(); 

nullInputStream() बजाय null क्यों घोषित: इन क्षेत्रों उदाहरण के लिए घोषित कर रहे हैं?

उत्तर

8

स्रोत कोड निम्नलिखित टिप्पणी System.innull के साथ अन्य कक्षाओं में संदर्भ (जो कि इनलाइनिंग का मतलब है)। जो स्पष्ट रूप से सबकुछ गैर-कार्यात्मक बना देगा। सिस्टम प्रारंभ होने के बाद कुछ देशी कोड का उपयोग इस System.in अंतिम मान (जो आमतौर पर कभी नहीं बदला जाना चाहिए) के मान को प्रतिस्थापित करने के लिए किया जाना चाहिए।

फिर से शुरू करने के लिए: इसका उपयोग एक संकलक अनुकूलन से बचने के लिए किया जाता है जिसे इस विशेष मामले में नहीं बनाया जाना चाहिए, क्योंकि System.in एक अंतिम क्षेत्र है जो बदल सकता है, जो सामान्य रूप से असंभव है।

+0

+1 यह सही उत्तर है। –

+0

आप सही हैं, 'सार्वजनिक स्थैतिक शून्य सेटइन (इनपुटस्ट्रीम इन' है और यह 'निजी स्थिर मूल शून्य सेटइन 0 (इनपुटस्ट्रीम इन) को आमंत्रित करता है;' – Pshemo

+0

setIno (इनपुटस्ट्रीम इन) और सेटऑट (प्रिंटस्ट्रीम आउट) – user1357722

-1

आप गलत हैं।

जावा स्रोत कोड में यह

public final static InputStream in = null; 

रूप में लिखा है नहीं

public final static InputStream in = nullInputStream(); 

आप System वर्ग here के लिए स्रोत कोड के संदर्भ ले सकते हैं। ,

/** 
* The following two methods exist because in, out, and err must be 
* initialized to null. The compiler, however, cannot be permitted to 
* inline access to them, since they are later set to more sensible values 
* by initializeSystemClass(). 
*/ 

संक्षेप में के बाद से System.in, एक स्थिर अंतिम चर रहा है अगर यह null लगभग तय था, संकलक एक निरंतर के रूप में यह विचार किया जाएगा, और सभी जगह लेंगे:

+0

कृपया इसे अंतिम अंतिम श्रेणी प्रणाली { /* पहली चीज़ के नीचे जांचें --- मूल निवासी */ निजी स्थैतिक मूल शून्य रजिस्टर रजिस्टर(); स्थिर { रजिस्टरनेट्स(); } /** किसी को इस वर्ग को तुरंत चालू न करने दें */ निजी सिस्टम() { } /** * "मानक" इनपुट स्ट्रीम। यह स्ट्रीम पहले से ही * इनपुट डेटा की आपूर्ति के लिए खुला और तैयार है। आम तौर पर यह धारा * कुंजीपटल इनपुट या * होस्ट वातावरण या उपयोगकर्ता द्वारा निर्दिष्ट अन्य इनपुट स्रोत से मेल खाती है। */ सार्वजनिक अंतिम स्थैतिक इनपुटस्ट्रीम = nullInputStream() में; – user1357722

+0

कहां से आपने स्रोत संदर्भ लिया है? –

+0

आपने गलत संदर्भ लिया है। –

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

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