1. Paghahambing ng mga bagay sa==

Ang paboritong pagkakamali ng mga newbie programmer ay ang paghahambing ng mga bagay (lalo na ang mga string) gamit ang ==operator. Halimbawa:

Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
   System.out.println("The strings are equal");
}

Hindi kailanman ipapakita ng code na ito ang "The strings are equal", dahil ifinihahambing ng statement ang mga reference sa dalawang magkaibang string object.

Narito ang tamang bersyon ng code:

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. Pagpapalit ng Stringbagay

Ang mga baguhan na programmer ay madalas na nakakalimutan na ang lahat ng mga bagay ng klase ay hindi nababago , at ang bawat pamamaraan ng Stringklase ay nagbabalik ng isang bagong bagay - ang kasalukuyang bagay ay hindi nagbabago.

Halimbawa:

String s = "Hello";
s.toUpperCase (); // Convert to uppercase

Ang code na ito ay halos kapareho sa tamang code, ngunit hindi ito gagana gaya ng inaasahan. Ang toUpperCase()pamamaraan ay hindi nagbabago sa bagay kung saan ito tinawag. Ang tamang code ay magiging ganito:

String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase


3. Nakakalimutang simulan ang mga bagay na elemento ng isang array

Ang isa pang karaniwang pagkakamali ay ang kalimutang simulan ang isang array variable. Halimbawa:

int[] array;
array[0] = 1;
array[0] = 2;

Hindi gagana ang code na ito: kailangan mong tahasang itakda ang array variable na katumbas ng isang reference sa container object na mag-iimbak ng mga elemento ng array.

int[] array = new int[10];
array[0] = 1;
array[0] = 2;


4. Paggamit ng lokal na variable sa halip na isang instance variable.

Ang mga baguhan ay hindi gustong makabuo ng mahaba at makabuluhang mga pangalan para sa mga variable. Madalas silang gumagamit ng mga pangalan ng isang titik: a, b, i, atbp. Iyon ay isang malupit na bagay na dapat gawin kapag ang code ay may ilang mga variable na tulad niyan:

Ilagay ang numero 99 sa 100 mga cell ng isang array
class Solution
{
  public static int a = 99;
  public static int i = 100;

  public static void main(String[] args)
  {
    int[] a = new int[i];
    for (int i = 0; i < 10; i++)
    {
      a[i] = a;
    }
  }
}

Ang code sa itaas ay hindi mag-compile. Ang tamang bersyon ay ganito ang hitsura:

Ilagay ang numero 99 sa 100 mga cell ng isang array
class Solution
{
   public static int value = 99;
   public static int count = 100;

   public static void main(String[] args)
   {
      int[] a = new int[count];
      for (int i = 0; i < count; i++)
      {
         a[i] = value;
      }
   }
}


5. Pag-alis ng isang koleksyon ng item

Kadalasan mayroong mga sitwasyon kung kailan kailangang alisin ang isang partikular na elemento mula sa isang koleksyon. Ang code ay halos ganito:

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);

Hindi gagana ang code na ito, dahil hindi ka maaaring gumamit ng para sa bawat loop upang sabay-sabay na daanan ang mga elemento ng isang koleksyon at baguhin ang koleksyong iyon.

Mayroong ilang mga solusyon. Una, maaari kang dumaan sa isang koleksyon at baguhin ang isa pa:

Solusyon 1
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);

ArrayList<Integer> copy = new ArrayList<Integer>(list);
for (Integer value: copy)
   if (value < 0)
      list.remove(value);

Pangalawa, mula noong Java 8, ang mga koleksyon ay may removeIf()pamamaraan, kung saan maaari kang magpasa ng isang panuntunan (lambda function) na nagpapahiwatig kung aling mga elemento ang aalisin.

Halimbawa:

Solusyon 2
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 0, -5, -7, -12, 5, 15);

list.removeIf( x-> x<0 );


6. Paglalagay ng ilang klase na may publicmodifier sa isang file

Maaari lamang magkaroon ng isang pampublikong klase sa isang file. Higit pang mga klase ang maaaring ideklara sa isang file, ngunit dapat silang mga panloob na klase ng isang pampublikong klase, o walang publicmodifier. Halimbawa:

Mga nilalaman ng Solution.java file Tandaan
public class Solution
{
}
public class Main
{
}
Hindi ito pinapayagan: dalawang pampublikong klase sa isang file.
public class Solution
{
}
class Main
{
}
Ngunit magagawa mo ito. Ang Pangunahing klase ay hindi pampubliko
public class Solution
{
  public static class Main
  {
  }
}
At magagawa mo ito. Ang Main class ay isang nested class


7. Pagtawag ng mga ordinaryong (non-static) na pamamaraan ng isang klase mula sa static main()na pamamaraan

Minsan sinusubukan ng mga newbie programmer na i-access ang mga di-static na variable at pamamaraan mula sa main()pamamaraan o iba pang mga static na pamamaraan. Ang naturang code ay hindi gagana, siyempre.

public class Solution
{
   public int n = 100;
   public int[] createArray()
   {
      return new int[n];
   }

   public static void main(String[]args)
   {
      int[] array = createArray();
   }
}

Ang pangunahing pamamaraan ay maaari lamang sumangguni sa mga static na pamamaraan/mga variable. Buweno, o kailangan muna itong lumikha ng isang halimbawa ng Solutionklase, at pagkatapos lamang tumawag ng mga non-static na pamamaraan ng bagay na iyon. Halimbawa:

Solusyon 1 Solusyon 2
public class Solution
{
  public static int n = 100;

  public static int[] createArray()
  {
    return new int[n];
  }

  public static void main(String[]args)
  {
    int[] array = createArray();
  }
}
public class Solution
{
  public int n = 100;

  public int[] createArray()
  {
    return new int[n];
  }

  public static void main(String[]args)
  {
    Solution sol = new Solution();
    int[] array = sol.createArray();
  }
}


8. Pagdedeklara ng isang constructor tulad ng isang pamamaraan

Ang isa pang karaniwang pagkakamali ay ang maling pagdedeklara ng isang tagabuo ng klase. Ang pangalan ng isang constructor ay dapat na kapareho ng pangalan ng klase, at ang isang constructor ay walang uri ng resulta. Ang pinakakaraniwang pagkakamali ay ganito ang hitsura:

public class Person
{
   private String value;

   void Person(String value)
   {
      this.value = value;
   }
}




Hindi dapat magkaroon ng uri ng pagbabalik dito
public class Person
{
   private String value;

   constructor(String value)
   {
      this.value = value;
   }
}




Di-wastong pangalan ng constructor. Ang pangalan ng constructor ay dapat tumugma sa pangalan ng klase
public class Person
{
   private String value;

   Person(String value)
   {
      value = value;
   }
}






this ay nawawala. Ang valuevariable ay itatalaga sa sarili nito
public class Person
{
   private String value;

   Person(String value)
   {
      this.value = value;
   }
}




Tama lahat yan


9. Maling pamana ng mga interface

Sinubukan ng mga tagalikha ng Java na gawin itong napakalapit sa Ingles, kaya pumili sila ng iba't ibang mga keyword para sa ilang partikular na kaugnay na konsepto.

Kapag ang isang klase ay nagmana ng isang klase, kailangan mong gamitin ang extendskeyword:

class Pet
{
}

class Cat extends Pet
{
}

Kapag nagmana ang isang klase ng interface, kailangan mong gamitin ang implementskeyword:

interface Meow
{
}

class Cat implements Meow
{
}

Kapag ang isang interface ay nagmana ng isang interface, gamitin ang extendskeyword:

interface Meow
{
}

interface Voice extends Meow
{
}


10. Pag-alis breaksa isang switchpahayag

At ang huling pagkakamali para sa atin ngayon, ngunit hindi ang huling pagkakamali para sa mga nagsisimula, ay ang hindi pagsasama ng isang breakpahayag sa isang switchpahayag. Halimbawa

mali Tama
LocalDate date = LocalDate.now();
DayOfWeek day = date.getDayOfWeek();
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
   case TUESDAY:
      System.out.println("Tuesday");
   case WEDNESDAY:
      System.out.println("Wednesday");
   case THURSDAY:
      System.out.println("Thursday");
   case FRIDAY:
      System.out.println("Friday");
   case SATURDAY:
      System.out.println("Saturday");
   case SUNDAY:
      System.out.println("Sunday");
}
LocalDate date = LocalDate.now();
DayOfWeek day = date.getDayOfWeek();
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}