परिचय: Java में प्रतिभाशाली लोग भी गलतियाँ क्यों करते हैं?
\n\nJava एक सख्त लेकिन कृतज्ञ भाषा है। हालाँकि, शुरुआती अक्सर एक ही रेक पर ठोकर खाते हैं। Stack Overflow के आँकड़ों के अनुसार, शुरुआती Java डेवलपर्स के 70% प्रश्न पाँच क्लासिक गलतियों से संबंधित होते हैं। इस लेख में हमने "शुरुआती Java डेवलपर्स की शीर्ष गलतियाँ: A से Z तक" संकलित किया है - == में भ्रम से लेकर मेमोरी के साथ गलत काम करने तक।
हम प्रत्येक समस्या को उदाहरणों के साथ समझाएँगे, ताकि आप केवल नियम याद न करें, बल्कि इसका सार समझें। चलिए शुरू करते हैं!
\n\n1. गलती #1: "==" बनाम equals() — एक क्लासिक
\n\nसबसे आम गलती स्ट्रिंग्स की तुलना == से करना है। शुरुआती सोचते हैं कि यह काम करता है, और फिर आश्चर्य करते हैं कि "Java" == "Java" false क्यों देता है।
ऐसा क्यों होता है?
\n- \n
==ऑब्जेक्ट्स के रेफरेंस (मेमोरी में पते) की तुलना करता है। \n equals()ऑब्जेक्ट्स की सामग्री की तुलना करता है। \n
उदाहरण:
\n\nString a = new String("Java");\nString b = new String("Java");\n\nSystem.out.println(a == b); // false — हीप में अलग-अलग ऑब्जेक्ट्स\nSystem.out.println(a.equals(b)); // true — समान सामग्री\n\n\nसुझाव: स्ट्रिंग्स के लिए हमेशा .equals() का उपयोग करें। प्रिमिटिव (int, double) के लिए — == सही ढंग से काम करता है।
2. गलती #2: NullPointerException को भूलना
\n\nNullPointerException (NPE) एक जूनियर का सबसे बड़ा दुश्मन है। यह अक्सर तब होता है जब आप null पर कोई मेथड कॉल करते हैं।
सामान्य परिदृश्य:
\n\npublic String getName(User user) {\n return user.getName().toUpperCase(); // यदि user == null — NPE!\n}\n\n\nकैसे ठीक करें? सुरक्षात्मक प्रोग्रामिंग का उपयोग करें:
\n\npublic String getName(User user) {\n if (user == null) {\n return "Unknown";\n }\n return user.getName().toUpperCase();\n}\n\n\nया, Java 8 से शुरू करके, Optional का उपयोग करें:
public String getName(User user) {\n return Optional.ofNullable(user)\n .map(u -> u.getName().toUpperCase())\n .orElse("Unknown");\n}\n\n\n3. गलती #3: अपवादों को अनदेखा करना
\n\nखाली catch-ब्लॉक एक एंटीपैटर्न है। त्रुटि गायब नहीं होती, आप बस इसे छिपा रहे हैं।
खराब कोड:
\n\ntry {\n int result = 10 / 0;\n} catch (ArithmeticException e) {\n // कुछ नहीं करते — त्रुटि चुपचाप निगल ली जाती है\n}\n\n\nअच्छा कोड:
\n\ntry {\n int result = 10 / 0;\n} catch (ArithmeticException e) {\n System.err.println("शून्य से विभाजन त्रुटि: " + e.getMessage());\n // या अपवाद को आगे फेंक दें\n throw new RuntimeException("गंभीर त्रुटि", e);\n}\n\n\n4. गलती #4: कलेक्शन के साथ गलत काम
\n\nशुरुआती अक्सर List, Set और Map में भ्रमित होते हैं, और जेनेरिक्स को भी भूल जाते हैं।
सामान्य गलतियाँ:
\n\n- \n
- रॉ टाइप्स (raw types) का उपयोग —
List list = new ArrayList();\n Iterator.remove()के बिना इटरेशन के दौरान कलेक्शन को बदलना \n - अंतर को समझे बिना
HashMapकोTreeMapसे बदलना \n
सही तरीका:
\n\nList<String> names = new ArrayList<>();\nnames.add("Alice");\nnames.add("Bob");\n\n// इटरेशन के दौरान हटाना\nIterator<String> iterator = names.iterator();\nwhile (iterator.hasNext()) {\n String name = iterator.next();\n if (name.equals("Alice")) {\n iterator.remove(); // सुरक्षित\n }\n}\n\n\n5. गलती #5: मेमोरी लीक और संसाधनों का गलत बंद करना
\n\nScanner, FileInputStream या डेटाबेस कनेक्शन को बंद करना भूल जाते हैं।