"Hai, Amigo! Mari kita lanjutkan berbicara tentang kesalahan. Kali ini, kita akan mengeksplorasi kesalahan yang tidak selalu dapat dibantu oleh kompiler. Perhatikan dan Anda akan mempelajari sesuatu tentang diri Anda."
"Aku siap mendengarkan, Diego. Kuharap ini tidak terlalu memalukan bagiku."
Membandingkan benda dengan==
"Daftar kesalahan programmer pemula favorit kami dimulai dengan membandingkan objek (terutama string) menggunakan ==
operator"
Contoh:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
"Saya sudah cukup sering melakukannya. Sekarang saya dapat dengan jelas melihat bahwa kode ini tidak akan pernah menampilkan" Stringnya sama ", karena pernyataan tersebut if
membandingkan referensi ke dua objek string yang berbeda."
"Ya. Itu sebabnya pilihan yang tepat adalah:
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");
}
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."
"Belum lama ini saya belajar apa arti abadi , tapi saya pikir saya sudah melakukan ini.
"Saya cukup yakin akan hal itu. Contoh:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
"Kode ini sangat mirip dengan kode yang benar, tetapi tidak akan berfungsi seperti yang diharapkan. toUpperCase()
Metode ini tidak mengubah objek yang dipanggil. Kode yang benar akan terlihat seperti ini:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
"Tepat. Aku sudah melakukannya, tapi aku bahkan tidak mengerti apa yang salah. Terima kasih atas penjelasannya!"
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 larik secara eksplisit sama dengan referensi ke objek penampung yang akan menyimpan elemen larik. Versi yang benar:
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
Menggunakan variabel lokal alih-alih variabel instan.
"Pemula tidak suka memberikan nama variabel yang panjang dan bermakna."
"Betul sekali. Untuk menyelesaikan sesuatu dengan cepat, terkadang saya memberi nama variabel seperti a
, b
, dan i
."
"Jangan lakukan itu. Itu hal yang kejam untuk dilakukan ketika kode memiliki beberapa variabel seperti itu:
Masukkan angka 99 ke dalam 100 sel array |
---|
|
"Jauh lebih sulit membuat kesalahan dalam kode dengan nama yang tepat. Versi yang benar terlihat seperti ini:
Masukkan angka 99 ke dalam 100 sel array |
---|
|
Menghapus item koleksi
"Apakah kamu sudah melihat-lihat koleksi?"
"Secara harfiah hanya dengan satu mata."
"Jika Anda tidak tahu apa yang saya bicarakan, buatlah catatan untuk diri Anda sendiri untuk melihat ke masa depan. Sangat sering ada situasi ketika elemen tertentu perlu dihapus dari koleksi. Kodenya terlihat seperti ini 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 for-each
loop 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 |
---|
|
Menempatkan beberapa kelas dengan public
pengubah 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. Contoh public
:
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 |
Memanggil metode kelas biasa (non-statis) dari main()
metode statis
"Terkadang pemrogram pemula mencoba mengakses variabel dan metode non-statis dari main()
metode atau metode statis lainnya. Kode seperti itu tentu saja tidak akan berfungsi.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
" main
Metode ini hanya dapat merujuk ke metode/variabel statis. Yah, atau pertama-tama harus membuat instance kelas Solution
, dan baru kemudian memanggil metode non-statis dari objek itu. Contoh:
Solusi 1 | Solusi 2 |
---|---|
|
|
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. Itu harus sesuai dengan nama kelas |
|
this hilang. Variabel value akan ditugaskan untuk dirinya sendiri |
|
Itu semua benar. |
Warisan antarmuka yang salah
"Pencipta Java mencoba membuatnya sangat dekat 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, atau, lebih tepatnya, mengimplementasikannya, Anda perlu menggunakan kata implements
kunci:
interface Meow
{
}
class Cat implements Meow
{
}
"Saat antarmuka mewarisi antarmuka, gunakan extends
kata kunci:
interface Meow
{
}
interface Voice extends Meov
{
}
Mengabaikan break
dalam switch
pernyataan
"Dan kesalahan terakhir untuk hari ini, tetapi bukan yang terakhir untuk pemula, adalah gagal memasukkan pernyataan break
dalam switch
pernyataan. Contoh:
Salah | Benar |
---|---|
|
|
"Kamu tahu, Diego... Dilihat dari serangkaian kesalahan yang kamu tampilkan di sini, rasanya seperti kamu sedang membaca jurnal pribadiku... Atau kamu sedang melihatku menyelesaikan tugas."
"Ha! Jangan ragu. Saya telah membaca, melacak, dan terus melakukannya. Jadi waspadalah!"
"???"
"Jangan khawatir. Aku hanya bercanda. Waspada dan kurangi kesalahan bodoh."
GO TO FULL VERSION