Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

Java.lang.NullPointerException त्रुटि को कैसे हल करें?

यदि आपने जावा-आधारित अनुप्रयोगों पर काम किया है, तो आपको NullPointerException नाम की कोई चीज़ अवश्य ही मिली होगी। नल पॉइंटर अपवाद जावा अनुप्रयोग विकास में सबसे आम त्रुटियों में से एक है। यह अपवाद आमतौर पर मानवीय त्रुटि का परिणाम होता है, लेकिन इस तरह की डिबगिंग त्रुटियों पर समय बर्बाद हो सकता है। यह समस्या पूरी तरह से वाक्यात्मक त्रुटि नहीं है, इसलिए कभी-कभी समस्या की पहचान करना मुश्किल हो सकता है।

इस लेख में, हम एक नज़र डालते हैं कि java.lang.NullPointerException क्या है, ऐसा क्यों होता है, आप इसे कैसे ठीक कर सकते हैं, और जंगली नल पॉइंटर्स में चलने से बचने के लिए कुछ सर्वोत्तम अभ्यासों का पालन करें। आगे की हलचल के बिना, चलिए शुरू करते हैं।

java.lang.NullPointerException क्या है?

नल पॉइंटर अपवाद जावा भाषा द्वारा समर्थित कई अपवादों में से एक है। यह इंगित करता है कि एक संदर्भ चर का उपयोग करने का प्रयास किया गया है जो वर्तमान में शून्य की ओर इशारा करता है।

नल जावा में डिफ़ॉल्ट मान है जो वेरिएबल को सौंपा गया है जो उपयोगकर्ता द्वारा घोषणा के बाद या उसके साथ प्रारंभ नहीं किया गया है। निम्नलिखित उदाहरण पर विचार करें जहां आप इस तरह एक चर घोषित करते हैं:

स्ट्रिंग स्ट्र;

और फिर चर की सामग्री को मुद्रित करने का प्रयास करें:

System.out.println(str);// => null

जैसा कि ऊपर देखा जा सकता है, 'null' आउटपुट पर प्रिंट हो जाता है। इससे पता चलता है कि चूंकि चर str अप्रारंभीकृत है, यह वर्तमान में मान को इंगित करता है, या रखता है, शून्य। समस्या यह है कि एक शून्य इंगित करने वाला चर यह है कि चर केवल एक संदर्भ है, और यह किसी भी चीज़ को इंगित नहीं करता है। यदि आप एक नल पॉइंटिंग वेरिएबल में संग्रहीत डेटा पर कुछ संचालन करने का प्रयास करते हैं, तो सिस्टम को पता नहीं चलेगा कि क्या करना है। ऐसा इसलिए होता है क्योंकि चर में वास्तव में कोई डेटा संग्रहीत नहीं होता है; यह एक शून्य इकाई की ओर इशारा करता है।

java.lang.NullPointer.Exception का उदाहरण

Java.lang.NullPointerException के उदाहरणों की तलाश करना कोई मुश्किल काम नहीं है, क्योंकि आपको बस इतना करना है कि इसे एक्सेस करने का प्रयास करने से पहले एक वेरिएबल को इनिशियलाइज़ नहीं करना है। उदाहरण के लिए, स्ट्रिंगबिल्डर वर्ग पर विचार करें। StringBuilder एक वर्ग है जिसका उपयोग स्ट्रिंग्स के गठन और हेरफेर को संभालने के लिए किया जाता है। यहां बताया गया है कि आप सामान्य रूप से स्ट्रिंग बनाने के लिए कक्षा का उपयोग कैसे करेंगे:

आयात करें एसबी.एपेंड ("हैलो"); एसबी.एपेंड ("विश्व!"); स्ट्रिंग परिणाम =sb.toString (); System.out.println (परिणाम); // => हैलो वर्ल्ड! }}

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

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

<पूर्व>आयात java.util.StringBuilder;पब्लिक क्लास टेस्ट {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) { StringBuilder sb; एसबी.एपेंड ("हैलो"); एसबी.एपेंड ("विश्व!"); स्ट्रिंग परिणाम =sb.toString (); System.out.println (परिणाम); }}

जैसा कि आप देख सकते हैं, हमने इसे घोषित करते समय StringBuilder वर्ग के एक उदाहरण को प्रारंभ नहीं किया। जब sb.append() लाइनों को निष्पादित किया जाता है, एसबी वास्तविकता में किसी वस्तु को इंगित नहीं करता है, बल्कि यह शून्य को इंगित करता है। यह वह जगह है जहाँ एक NullPointerException फेंका जाता है। अपवाद फेंके जाने के कारण, JVM इसके बाद किसी भी कथन को निष्पादित नहीं कर सकता है।

Java.lang.NullPointerException त्रुटि को कैसे ठीक करें

एक नल पॉइंटर अपवाद बनाना आसान है, लेकिन इसे टालना या ठीक करना मुश्किल है। जबकि कुछ एकीकृत विकास वातावरण (आईडीई) आपको चेतावनी देते हैं कि यदि आप किसी चर को कुछ संगत मान के साथ प्रारंभ करने से पहले एक्सेस कर रहे हैं, तो अधिकांश आईडीई जटिल परिस्थितियों में इसका पता नहीं लगा सकते हैं, जैसे कि कई विधि कॉल के माध्यम से एक चर पारित करते समय। नल पॉइंटर एक्सेप्शन के लिए सटीक फिक्स आपकी स्थिति और कोड पर निर्भर करता है। यहां सामान्य नल पॉइंटर परिदृश्यों को ठीक करने के कुछ शीर्ष तरीके दिए गए हैं:

मैन्युअल त्रुटियों के लिए अपना कोड जांचें

नल पॉइंटर एक्सेप्शन होने का सबसे बड़ा कारण मानवीय त्रुटि है। सुनिश्चित करें कि आपके द्वारा लिखा गया प्रोग्राम सही तर्क रखता है जिसका आपने शुरू में इरादा किया था। इसके अलावा, स्रोत कोड के माध्यम से अपनी आंखें चलाएं ताकि यह जांचा जा सके कि क्या आपने कोई बयान याद किया है, या किसी भी चर को गलत वर्तनी दी है जिसके कारण कुछ चर को मान नहीं दिया जा सकता है।

सुनिश्चित करें कि आपने अपना कोड उसी तरह लिखा है जिस तरह से आपका तर्क आपको निर्देशित करता है, और आप कोई भी कथन लिखने से नहीं चूके हैं, या गलत संदर्भों के लिए ऑब्जेक्ट असाइन नहीं किए हैं। एक नियम के रूप में, जांच लें कि किसी भी चर का उपयोग करने से पहले, इसे किसी ऑब्जेक्ट के साथ प्रारंभ किया गया है।

कोड के आस-पास सुरक्षा जांच करें जिससे नल पॉइंटर एक्सेप्शन हो सकता है

यदि आप कोड की उस पंक्ति को जानते हैं जो आपके NullPointer का कारण बन रही है और आपको विश्वास है कि आपका तर्क भी सही है, तो आप कोड के अनुभाग को ट्राइ-कैच ब्लॉक में लपेट सकते हैं, और जब कोई नल पॉइंटर पकड़ा जाता है, तो उसके व्यवहार को परिभाषित कर सकते हैं। ऐसा सेट-अप इस तरह दिखेगा:

...// कुछ कोड उपरोक्त {//अपवाद-प्रवण कोड यहां रखें} पकड़ें (NullPointerException npe) {// परिभाषित करें कि जब कोई एनपीई पकड़ा जाता है तो क्या किया जाना चाहिए}// नीचे कुछ कोड ... 

यह उन स्थितियों में होता है जहां एक निश्चित संदर्भ चर में शून्य हो सकता है या नहीं भी हो सकता है। अधिक बार नहीं, दूरस्थ एपीआई प्रतिक्रियाएँ, डिवाइस इंटरफ़ेस प्रतिक्रियाएँ इस परिदृश्य के लिए प्रवण होती हैं। परिणाम या हार्डवेयर की उपलब्धता के आधार पर, प्रतिक्रिया चर किसी तात्कालिक वस्तु को इंगित कर सकता है या नहीं भी कर सकता है। इन स्थितियों से निपटने के लिए सुरक्षा जांच का उपयोग करना सबसे उपयुक्त है।

कुछ एक्सेस करने से पहले शून्य की जांच करें

यह विधि ट्राइ-कैच विधि के समान है। इस पद्धति में, एक चर तक पहुँचने से पहले शून्य मानों की जाँच के लिए 'if' ब्लॉक का उपयोग किया जाता है। यदि त्रुटि को पकड़ने के लिए 'if' ब्लॉक का उपयोग किया जाता है तो कोड का पिछला स्निपेट कैसा दिखेगा:

...// कुछ कोड ऊपर अगर (myVar !==null ) {// सक्सेस लॉजिक को यहां रखें} और {//हैंडल नल वैल्यू यहां}// नीचे कुछ कोड...

दो विधियों के बीच सबसे बड़ा अंतर उनके द्वारा किए जाने वाले चेक का दायरा है। यदि विधि केवल शून्य मानों के लिए myVar चर की जांच करती है, जबकि ट्राइ-कैच ब्लॉक किसी भी और सभी चर को पकड़ता है जो शून्य हैं।

यह आपके एप्लिकेशन लॉजिक में नल पॉइंटर्स को समायोजित करने के लिए 'if' ब्लॉक को अधिक लक्षित और स्वच्छ दृष्टिकोण बनाता है। हालांकि, अगर एक से अधिक वेरिएबल हैं जो शून्य हो सकते हैं, तो सरलता के लिए ट्राइ-कैच ब्लॉक के साथ जाना बेहतर है।

निष्कर्ष

इस आलेख ने जावा में नल पॉइंटर अपवाद क्या है, और यह त्रुटि कैसे होती है, इस पर एक नज़र डाली। हमने कोड के एक टुकड़े को भी देखा जो एक नल पॉइंटर एक्सेप्शन का कारण बनेगा, यह समझने के लिए कि वास्तविक जीवन की स्थितियों में नल पॉइंटर्स कैसे बनाए जाते हैं। अंत में, हमने नल पॉइंटर अपवाद को ठीक करने के कुछ शीर्ष तरीकों की पहचान करने के लिए निर्धारित किया और एनपीई को ठीक करने के दो तरीकों के बीच अंतर करके अपनी चर्चा समाप्त की।

यदि आप जावा प्रोग्राम लिखना चाह रहे हैं, तो एक नल पॉइंटर एक्सेप्शन एक आवश्यक बग है जिसे आपको ठीक करने का तरीका पता होना चाहिए। यह अपवाद सबसे आम मुद्दों में से एक है और यह आपके कोड के सिंटैक्स या शब्दार्थ से संबंधित नहीं है। यह अपवाद को पहचानने और ठीक करने के लिए सबसे कठिन समस्याओं में से एक बनाता है। इस लेख की तरह समस्या को ठीक करने के लिए एक त्वरित संदर्भ आपके अनुभव को आसान बनाने के लिए बाध्य है।


  1. त्रुटि 502 खराब गेटवे को कैसे हल करें?

    लगभग सभी को एक बार भी किसी न किसी वेबसाइट त्रुटि का सामना करना पड़ा होगा। ये प्रकृति में बहुत सामान्य हैं, आपको केवल समस्या के मुख्य कारणों का पता लगाने की आवश्यकता है। त्रुटियों के बारे में जानकर, आप इसके कारणों का पता लगा सकते हैं और इसे ठीक करने में स्वयं की सहायता कर सकते हैं। आश्चर्यजनक रूप से

  1. नेटफ्लिक्स साइट त्रुटि:इस त्रुटि को कैसे हल करें

    नेटफ्लिक्स हमारा सर्वकालिक पसंदीदा साथी है जिसने हमें कोरोनावायरस के प्रकोप से पहले ही सामाजिक दूरी का पालन करने के लिए प्रोत्साहित किया था। हाँ, आपको यहाँ ईमानदार होना है! और विशेष रूप से अब, इस स्व-संगरोध चरण में, नेटफ्लिक्स इस कठिन समय के दौरान हमारा मनोरंजन करने के लिए बहुत अच्छा काम कर रहा है।

  1. ERR_NETWORK_CHANGED Chrome त्रुटि को कैसे हल करें

    विंडोज 10 उपयोगकर्ताओं द्वारा सामना की जाने वाली आम समस्याओं में से एक ERR_NETWORK_CHANGED क्रोम त्रुटि है। जैसा कि संदेश स्पष्ट रूप से कहता है, यह त्रुटि तब होती है जब इंटरनेट कनेक्शन या ब्राउज़र किसी पृष्ठ को लोड करने की अनुमति नहीं दे रहा होता है। इसका अर्थ है कि क्रोम का उपयोग करते समय आप किसी भ