1. वस्तुओं की तुलना करना==
नौसिखिया प्रोग्रामर की पसंदीदा गलती ==
ऑपरेटर का उपयोग कर वस्तुओं (विशेष रूप से तार) की तुलना कर रही है। उदाहरण के लिए:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
यह कोड "स्ट्रिंग्स बराबर हैं" कभी प्रदर्शित नहीं करेगा, क्योंकि if
कथन दो अलग-अलग स्ट्रिंग ऑब्जेक्ट्स के संदर्भों की तुलना करता है।
यहाँ कोड का सही संस्करण है:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1.equals(s2))
{
System.out.println("The strings are equal");
}
2. किसी String
वस्तु को बदलना
नौसिखिए प्रोग्रामर अक्सर यह भूल जाते हैं कि कक्षा की सभी वस्तुएँ अपरिवर्तनीय हैं , और यह कि String
कक्षा की प्रत्येक विधि एक नई वस्तु लौटाती है - वर्तमान वस्तु कभी नहीं बदलती।
उदाहरण:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
यह कोड सही कोड के समान है, लेकिन यह उम्मीद के मुताबिक काम नहीं करेगा। विधि toUpperCase()
उस वस्तु को नहीं बदलती जिस पर इसे कहा जाता है। सही कोड इस तरह दिखेगा:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
3. उन वस्तुओं को इनिशियलाइज़ करना भूल जाना जो एक सरणी के तत्व हैं
एक और आम गलती है कि किसी ऐरे वेरिएबल को इनिशियलाइज़ करना भूल जाना। उदाहरण:
int[] array;
array[0] = 1;
array[0] = 2;
यह कोड काम नहीं करेगा: आपको सरणी चर को कंटेनर ऑब्जेक्ट के संदर्भ के बराबर स्पष्ट रूप से सेट करने की आवश्यकता है जो सरणी के तत्वों को संग्रहीत करेगा।
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
4. उदाहरण चर के बजाय स्थानीय चर का उपयोग करना।
Newbies वेरिएबल्स के लिए लंबे और अर्थपूर्ण नामों के साथ आना पसंद नहीं करते हैं। वे अक्सर एक-अक्षर वाले नामों का उपयोग करते हैं: a
, b
, i
, आदि। जब कोड में इस तरह के कई चर होते हैं तो यह एक क्रूर काम होता है:
संख्या 99 को एक सरणी के 100 कक्षों में रखें |
---|
|
उपरोक्त कोड संकलित नहीं होगा। सही संस्करण इस तरह दिखता है:
संख्या 99 को एक सरणी के 100 कक्षों में रखें |
---|
|
5. एक संग्रह आइटम को हटाना
बहुत बार ऐसे हालात होते हैं जब किसी संग्रह से एक निश्चित तत्व को निकालने की आवश्यकता होती है। कोड लगभग इस तरह दिखता है:
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);
for (Integer value: list)
if (value < 0)
list.remove(value);
यह कोड काम नहीं करेगा, क्योंकि आप संग्रह के तत्वों को एक साथ पार करने और उस संग्रह को संशोधित करने के लिए प्रत्येक लूप का उपयोग नहीं कर सकते हैं।
कई उपाय हैं। सबसे पहले, आप एक संग्रह को पार कर सकते हैं और दूसरे को बदल सकते हैं:
समाधान 1 |
---|
|
दूसरा, जावा 8 के बाद से, संग्रह में एक removeIf()
विधि है, जिसके लिए आप एक नियम (लैम्ब्डा फ़ंक्शन) पास कर सकते हैं जो इंगित करता है कि किन तत्वों को निकालना है।
उदाहरण:
समाधान 2 |
---|
|
6. संशोधक के साथ कई वर्गों को public
एक फ़ाइल में रखना
एक फ़ाइल में केवल एक सार्वजनिक वर्ग हो सकता है। एक फ़ाइल में अधिक कक्षाएं घोषित की जा सकती हैं, लेकिन उन्हें या तो सार्वजनिक वर्ग की आंतरिक कक्षाएं होनी चाहिए, या public
संशोधक नहीं होना चाहिए। उदाहरण:
Solution.java फ़ाइल की सामग्री | टिप्पणी |
---|---|
|
इसकी अनुमति नहीं है: एक फ़ाइल में दो सार्वजनिक वर्ग। |
|
लेकिन आप ऐसा कर सकते हैं। मुख्य वर्ग सार्वजनिक नहीं है |
|
और आप यह कर सकते हैं। मुख्य वर्ग एक नेस्टेड वर्ग है |
7. स्थैतिक main()
विधि से किसी वर्ग के साधारण (गैर-स्थैतिक) तरीकों को कॉल करना
main()
कभी-कभी नौसिखिए प्रोग्रामर विधि या अन्य स्थिर तरीकों से गैर-स्थैतिक चर और विधियों तक पहुँचने का प्रयास करते हैं। ऐसा कोड निश्चित रूप से काम नहीं करेगा।
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
मुख्य विधि केवल स्थैतिक विधियों/चरों को संदर्भित कर सकती है। ठीक है, या इसे पहले कक्षा का एक उदाहरण बनाना होगा Solution
, और उसके बाद ही उस वस्तु के गैर-स्थैतिक तरीकों को कॉल करना होगा। उदाहरण:
समाधान 1 | समाधान 2 |
---|---|
|
|
8. कंस्ट्रक्टर को एक विधि की तरह घोषित करना
एक और आम गलती गलत तरीके से क्लास कंस्ट्रक्टर घोषित करना है। कंस्ट्रक्टर का नाम क्लास के नाम के समान होना चाहिए, और कंस्ट्रक्टर का कोई परिणाम प्रकार नहीं होता है। सबसे आम गलतियाँ इस तरह दिखती हैं:
|
यहां रिटर्न टाइप नहीं होना चाहिए |
|
अमान्य निर्माता नाम। कंस्ट्रक्टर का नाम क्लास के नाम से मेल खाना चाहिए |
|
this लापता है। वेरिएबल value खुद को असाइन किया जाएगा |
|
वह सब सही है |
9. इंटरफेस की गलत विरासत
जावा के रचनाकारों ने इसे अंग्रेजी के बहुत करीब बनाने की कोशिश की, इसलिए उन्होंने कुछ संबंधित अवधारणाओं के लिए अलग-अलग कीवर्ड चुने।
जब एक वर्ग एक वर्ग को इनहेरिट करता है, तो आपको extends
कीवर्ड का उपयोग करना होगा:
class Pet
{
}
class Cat extends Pet
{
}
जब कोई वर्ग इंटरफ़ेस प्राप्त करता है, तो आपको implements
कीवर्ड का उपयोग करने की आवश्यकता होती है:
interface Meow
{
}
class Cat implements Meow
{
}
जब कोई इंटरफ़ेस किसी इंटरफ़ेस को इनहेरिट करता है, तो extends
कीवर्ड का उपयोग करें:
interface Meow
{
}
interface Voice extends Meow
{
}
10. कथन break
में चूक करनाswitch
और आज हमारे लिए आखिरी गलती है, लेकिन शुरुआती लोगों के लिए आखिरी नहीं, एक बयान break
में एक बयान शामिल करने में नाकाम रही है। switch
उदाहरण
गलत | सही |
---|---|
|
|
GO TO FULL VERSION