5

जब तक कोई कोड लाइन नहीं है, throw new NullPointerException(); नल पॉइंटर्स आमतौर पर तब होते हैं जब null होने वाली अभिव्यक्ति को संचालित किया जाता है। तो, मेरा सवाल यह है कि, नल पॉइंटर के लिए संदेश में अभिव्यक्ति क्यों नहीं होती है जो शून्य हो रही है?क्यों शून्य सूचक अपवाद अभिव्यक्ति प्रदान नहीं करता है जो शून्य है?

+3

क्या आप यह जानने के लिए कुछ उदाहरण पोस्ट कर सकते हैं कि आप क्या पूछने की कोशिश कर रहे हैं? स्टैक ट्रेस लाइन नंबर प्रदान करता है जहां अपवाद होता है। –

+1

ऑप्टिमाइज़ेशन, आदि के चेहरे में, जो आमतौर पर रनटाइम पर जाना जाता है, "यह चीज जो संदर्भ होने के लिए थी, वास्तव में 'शून्य' है। उस संदर्भ को अतीत में किसी भी समय, कहीं और गणना की गई हो सकती है। –

उत्तर

4

मुझे निश्चित रूप से पता नहीं है, लेकिन मुझे लगता है कि कारण यह है कि यदि JVM को सटीक अभिव्यक्ति की रिपोर्ट करने में सक्षम होना चाहिए तो अपवाद को फेंकने के लिए प्रमुख प्रदर्शन समस्याएं हो सकती हैं।

कम से कम, इसे कक्षा फ़ाइल स्वरूप में परिवर्तन की आवश्यकता होगी (वास्तव में) ठीक अनाज स्रोत कोड स्थिति जानकारी ... लाइन संख्याओं से बेहतर दाग।

वैसे भी, सवाल म्यूट है ... 'क्योंकि यह नहीं है।

+0

सिर्फ इसलिए कि जावा एक प्रोग्रामिंग भाषा है, इसलिए मैं इसके कार्यान्वयन पर सवाल नहीं रोकूंगा! – MozenRath

+0

@MozenRath - ठीक है अगर आप एक असली जवाब चाहते हैं, तो आप गलत लोगों से पूछ रहे हैं। जावा टीम से पूछें। ओटीओएच, यदि आप वास्तव में जावा पर सवाल पूछ रहे हैं (यानी इसकी आलोचना कर रहे हैं) तो SO ऐसा करने के लिए उचित जगह नहीं है; एफएक्यू देखें। –

+0

मुझे यह मिल गया .. धन्यवाद हालांकि! – MozenRath

4

NullPointerException तब होता है जब आप null को हटाना चाहते हैं, न कि जब आप केवल एक बनाते हैं या नहीं करते हैं। स्टैक ट्रेस में रेखा होती है, और यह जितना अच्छा हो जाता है, और JVM वास्तव में नहीं जानता है कि null कहां से आया है, यह ऐसी चीजों का ट्रैक नहीं रखता है जब यह जितनी जल्दी हो सके बाइटकोड से गुजरने का प्रयास करता है।


आप मुसीबत ऐसी स्थितियों डिबगिंग है, तो आप कर सकते हैं हमेशा विभाजन अभिव्यक्ति और उपयोग अस्थायी चर: 1 रेखा से ऊपर NullPointerException फेंकता

String tmp = myObj.getSomething(); 
String result = tmp.substring(1); 

हैं (स्टैक ट्रेस दिखा के साथ यह है कि लाइन से आया नहीं myObj.getSomething() के अंदर से), आप जानते हैं कि myObj शून्य था। यदि दूसरी पंक्ति NullPointerException फेंकता है, तो आप जानते हैं कि tmp शून्य था, यानी myObj.getSomething() शून्य वापस लौटा। यदि आप देखते हैं कि myObj.getSomething() वास्तव में सामान्य स्थिति में शून्य हो सकता है, तो आप वहां if (tmp != null) { ... } else { ... } कोड जोड़ सकते हैं।

+1

पर्याप्त कहा: स्टैक ट्रेस। –

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