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 if
pernyataan 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 String
objek
Pemrogram pemula sering lupa bahwa semua objek kelas tidak dapat diubah , dan bahwa setiap metode kelas String
mengembalikan 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 |
---|
|
Kode di atas tidak akan dikompilasi. Versi yang benar terlihat seperti ini:
Masukkan angka 99 ke dalam 100 sel array |
---|
|
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 |
---|
|
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 |
---|
|
6. Menempatkan beberapa class dengan public
modifier 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 |
---|---|
|
Ini tidak diperbolehkan: dua kelas publik dalam satu file. |
|
Tapi Anda bisa melakukan ini. Kelas Utama tidak bersifat publik |
|
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 Solution
kelas, dan baru kemudian memanggil metode non-statis dari objek itu. Contoh:
Solusi 1 | Solusi 2 |
---|---|
|
|
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:
|
Seharusnya tidak ada tipe pengembalian di sini |
|
Nama konstruktor tidak valid. Nama konstruktor harus sesuai dengan nama kelas |
|
this hilang. Variabel value akan ditugaskan untuk dirinya sendiri |
|
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 extends
kata kunci:
class Pet
{
}
class Cat extends Pet
{
}
Saat kelas mewarisi antarmuka, Anda perlu menggunakan implements
kata kunci:
interface Meow
{
}
class Cat implements Meow
{
}
Saat antarmuka mewarisi antarmuka, gunakan extends
kata kunci:
interface Meow
{
}
interface Voice extends Meow
{
}
10. Menghilangkan break
dalam sebuah switch
pernyataan
Dan kesalahan terakhir bagi kita hari ini, tetapi bukan yang terakhir bagi para pemula, adalah gagal memasukkan pernyataan break
dalam switch
pernyataan. Contoh
Salah | Benar |
---|---|
|
|