परिचय: जावा में शुरुआती अक्सर गलतियाँ क्यों करते हैं?
जावा दुनिया की सबसे लोकप्रिय और मांग वाली प्रोग्रामिंग भाषाओं में से एक है। हालाँकि, इसकी सख्त टाइपिंग, बॉयलरप्लेट कोड की अधिकता और मेमोरी के साथ काम करने की विशेषताएं अक्सर शुरुआती डेवलपर्स को भ्रमित करती हैं। अनुभवी प्रोग्रामर भी कभी-कभी क्लासिक गलतियाँ करते हैं, लेकिन शुरुआती लोगों के लिए वे घंटों डीबगिंग का कारण बन सकती हैं।
इस लेख में हम शुरुआती जावा डेवलपर्स की 10 सबसे आम गलतियों का विश्लेषण करेंगे। आप सीखेंगे कि उन्हें कैसे पहचानें, ठीक करें और, इससे भी महत्वपूर्ण बात, भविष्य में उनसे कैसे बचें। प्रत्येक बिंदु कोड के एक स्पष्ट उदाहरण और एक व्यावहारिक सुझाव के साथ दिया गया है।
1. NullPointerException (NPE) को भूल जाना
जावा में सबसे प्रसिद्ध और कपटी त्रुटि। अक्सर NPE तब होता है जब आप किसी ऐसी वस्तु पर विधि को कॉल करने या फ़ील्ड तक पहुँचने का प्रयास करते हैं जो null के बराबर है।
गलती का उदाहरण
public class Main { public static void main(String[] args) { String text = null; int length = text.length(); // NullPointerException! }}कैसे ठीक करें
- उपयोग करने से पहले हमेशा वस्तुओं को
nullके लिए जाँचें। - उन विधियों के लिए
Optionalका उपयोग करें जो खाली मान लौटा सकती हैं। - कोड को दस्तावेज़ित करने के लिए
@Nullableऔर@NonNullएनोटेशन लागू करें।
public static int getLengthSafely(String text) { return Optional.ofNullable(text) .map(String::length) .orElse(0);}2. equals() के बजाय == के माध्यम से स्ट्रिंग्स की तुलना करना
ऑपरेटर == वस्तुओं के संदर्भों की तुलना करता है, न कि उनकी सामग्री की। स्ट्रिंग्स के लिए यह महत्वपूर्ण है, क्योंकि जावा स्ट्रिंग पूल का उपयोग करता है और new String() को कॉल करने पर नई वस्तुएँ बनाता है।
गलती का उदाहरण
String a = "Hello";String b = new String("Hello");System.out.println(a == b); // false! हालाँकि स्ट्रिंग्स समान हैंकैसे ठीक करें
- स्ट्रिंग्स की सामग्री की तुलना करने के लिए हमेशा
equals()का उपयोग करें। - केस को अनदेखा करने के लिए
equalsIgnoreCase()लागू करें।
System.out.println(a.equals(b)); // true3. संसाधनों को अनदेखा करना: Connection, File या Stream को बंद नहीं करना
फ़ाइलों, डेटाबेस या नेटवर्क कनेक्शन के साथ काम करने के लिए संसाधनों को स्पष्ट रूप से बंद करने की आवश्यकता होती है। यदि ऐसा नहीं किया जाता है, तो मेमोरी लीक और फ़ाइल लॉकिंग होती है।
गलती का उदाहरण
FileInputStream fis = new FileInputStream("file.txt");// फ़ाइल के साथ काम कर रहे हैं// fis.close() को कॉल करना भूल गए;कैसे ठीक करें
Java 7 से शुरू करके, try-with-resources निर्माण का उपयोग करें। अपवाद होने पर भी संसाधन स्वचालित रूप से बंद हो जाएंगे।
try (FileInputStream fis = new FileInputStream("file.txt")) { // फ़ाइल के साथ काम कर रहे हैं} catch (IOException e) { e.printStackTrace();}4. equals() और hashCode() के कार्य सिद्धांतों की गलतफहमी
यदि आप equals() को ओवरराइड करते हैं, तो आपको hashCode() को भी ओवरराइड करना अनिवार्य है। अन्यथा, आपकी वस्तुएँ HashSet, HashMap और इसी तरह के कलेक्शन में सही ढंग से काम नहीं कर पाएंगी।
गलती का उदाहरण
class User { String name; User(String name) { this.name = name; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(name, user.name); } // hashCode ओवरराइड नहीं किया गया!}
Set<User> users = new HashSet<>();users.add(new User("Alice"));users.add(new User("Alice"));System.out.println(users.size()); // 2, जबकि 1 की उम्मीद थी