बाद java.lang.System वर्ग से कोड है (JDK संस्करण 1,6)अजीब 'बाहर' चर, println()
public final static PrintStream out = nullPrintStream(); //out is set to 'null'
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
जब हम अपने कोड में System.out.println("Something");
तो लिखना क्यों डॉन ' टी हम NullPointerException यहाँ तक कि जब 'बाहर' 'अशक्त' पर सेट है मिल
किसी भी तरह out
प्रणाली कक्षा में
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
setOut
विधि निम्नलिखित के माध्यम से स्थापित किया जाएगा वे एन जेएलएस को nullPrintStream
विधि क्यों चाहिए?
'if (currentTimeMillis()> 0) {वापसी शून्य; } '=> यह वास्तव में अजीब है .. जेडीके 7 में, यह बस है: 'सार्वजनिक अंतिम स्थैतिक प्रिंटस्ट्रीम आउट = शून्य;'। – assylias
@assylias यह जैवैक/जेआईटी कंपाइलर्स के पिछले संस्करणों को शांत करने के लिए सब कुछ है। इसके बिना 'अगर' कंपाइलर को एहसास हो सकता है कि यह हमेशा खराब होता है और सभी खराब परिणामों के साथ संकलन-समय निरंतर के रूप में 'आउट' को संकलित करता है। –
इसका मतलब है कि 'currentTimeMillis() 'के मान को' लम्बी 'के लिए अधिकतम मान ओवरफ्लो करने के लिए पर्याप्त समय बीत चुका है, जावा 7 से पुराने वर्चुअल मशीनों के साथ चल रहे सभी एप्लिकेशन एक त्रुटि के साथ विफल हो जाएंगे:' java.lang ।ExceptionInInitializerError java.lang.NullPointerException द्वारा java.lang.System.nullPrintStream (अज्ञात स्रोत) 'या इसी तरह के कारण हुआ। – gparyani