1. Membandingkan benda dengan==

Kesalahan favorit programmer pemula adalah membandingkan objek (terutama string) menggunakan ==operator. Misalnya:

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

Kode ini tidak akan pernah menampilkan "Stringnya sama", karena ifpernyataan tersebut membandingkan referensi ke dua objek string yang berbeda.

Ini adalah versi kode yang benar:

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. Mengubah Stringobjek

Pemrogram pemula sering lupa bahwa semua objek kelas tidak dapat diubah , dan bahwa setiap metode kelas Stringmengembalikan objek baru — objek saat ini tidak pernah berubah.

Contoh:

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

Kode ini sangat mirip dengan kode yang benar, tetapi tidak akan berfungsi seperti yang diharapkan. Metode toUpperCase()tidak mengubah objek yang dipanggil. Kode yang benar akan terlihat seperti ini:

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


3. Lupa menginisialisasi objek yang merupakan elemen dari array

Kesalahan umum lainnya adalah lupa menginisialisasi variabel array. Contoh:

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

Kode ini tidak akan berfungsi: Anda perlu menyetel variabel array secara eksplisit sama dengan referensi ke objek penampung yang akan menyimpan elemen array.

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


4. Menggunakan variabel lokal sebagai pengganti variabel instan.

Pemula tidak suka memberikan nama yang panjang dan bermakna untuk variabel. Mereka sering menggunakan nama satu huruf: a, b, i, dll. Itu hal yang kejam untuk dilakukan ketika kode memiliki beberapa variabel seperti itu:

Masukkan angka 99 ke dalam 100 sel 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;
    }
  }
}

Kode di atas tidak akan dikompilasi. Versi yang benar terlihat seperti ini:

Masukkan angka 99 ke dalam 100 sel 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. Menghapus item koleksi

Sangat sering ada situasi ketika elemen tertentu perlu dihapus dari koleksi. Kodenya kira-kira seperti ini:

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

Kode ini tidak akan berfungsi, karena Anda tidak dapat menggunakan perulangan untuk setiap perulangan untuk melintasi elemen koleksi secara bersamaan dan memodifikasi koleksi tersebut.

Ada beberapa solusi. Pertama, Anda dapat melintasi satu koleksi dan mengubah yang lain:

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

Kedua, sejak Java 8, koleksi memiliki removeIf()metode, di mana Anda dapat memberikan aturan (fungsi lambda) yang menunjukkan elemen mana yang akan dihapus.

Contoh:

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

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


6. Menempatkan beberapa class dengan publicmodifier ke dalam satu file

Hanya ada satu kelas publik dalam sebuah file. Lebih banyak kelas dapat dideklarasikan dalam sebuah file, tetapi mereka harus menjadi kelas dalam dari kelas publik, atau tidak memiliki pengubah public. Contoh:

Isi file Solution.java Catatan
public class Solution
{
}
public class Main
{
}
Ini tidak diperbolehkan: dua kelas publik dalam satu file.
public class Solution
{
}
class Main
{
}
Tapi Anda bisa melakukan ini. Kelas Utama tidak bersifat publik
public class Solution
{
  public static class Main
  {
  }
}
Dan Anda bisa melakukan ini. Kelas Utama adalah kelas bersarang


7. Memanggil metode biasa (non-statis) suatu kelas dari main()metode statis

Terkadang pemrogram pemula mencoba mengakses variabel dan metode non-statis dari main()metode atau metode statis lainnya. Kode seperti itu tidak akan berfungsi, tentu saja.

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

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

Metode utama hanya dapat merujuk ke metode/variabel statis. Nah, atau pertama-tama harus membuat turunan dari Solutionkelas, dan baru kemudian memanggil metode non-statis dari objek itu. Contoh:

Solusi 1 Solusi 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. Mendeklarasikan konstruktor seperti metode

Kesalahan umum lainnya adalah salah mendeklarasikan konstruktor kelas. Nama konstruktor harus sama dengan nama kelas, dan konstruktor tidak memiliki tipe hasil. Kesalahan paling umum terlihat seperti ini:

public class Person
{
   private String value;

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




Seharusnya tidak ada tipe pengembalian di sini
public class Person
{
   private String value;

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




Nama konstruktor tidak valid. Nama konstruktor harus sesuai dengan nama kelas
public class Person
{
   private String value;

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






this hilang. Variabel valueakan ditugaskan untuk dirinya sendiri
public class Person
{
   private String value;

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




Itu semua benar


9. Warisan antarmuka yang salah

Pembuat Java mencoba membuatnya sangat mirip dengan bahasa Inggris, jadi mereka memilih kata kunci yang berbeda untuk konsep terkait tertentu.

Saat kelas mewarisi kelas, Anda harus menggunakan extendskata kunci:

class Pet
{
}

class Cat extends Pet
{
}

Saat kelas mewarisi antarmuka, Anda perlu menggunakan implementskata kunci:

interface Meow
{
}

class Cat implements Meow
{
}

Saat antarmuka mewarisi antarmuka, gunakan extendskata kunci:

interface Meow
{
}

interface Voice extends Meow
{
}


10. Menghilangkan breakdalam sebuah switchpernyataan

Dan kesalahan terakhir bagi kita hari ini, tetapi bukan yang terakhir bagi para pemula, adalah gagal memasukkan pernyataan breakdalam switchpernyataan. Contoh

Salah Benar
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;
}