1. Nesneleri ile karşılaştırma==
Acemi programcıların en sevdiği hata, operatörü kullanarak nesneleri (özellikle dizileri) karşılaştırmaktır ==
. Örneğin:
Scanner console = new Scanner(System.in);
String s1 = console.nextLine();
String s2 = console.nextLine();
if (s1 == s2)
{
System.out.println("The strings are equal");
}
Bu kod hiçbir zaman "Dizeler eşittir" ifadesini görüntülemez, çünkü if
ifade referansları iki farklı dize nesnesiyle karşılaştırır.
İşte kodun doğru versiyonu:
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. Bir String
nesneyi değiştirmek
Acemi programcılar genellikle sınıfın tüm nesnelerinin değişmez olduğunu ve sınıfın her yönteminin String
yeni bir nesne döndürdüğünü unutur - geçerli nesne asla değişmez.
Örnek:
String s = "Hello";
s.toUpperCase (); // Convert to uppercase
Bu kod, doğru koda çok benzer, ancak beklendiği gibi çalışmaz. Yöntem toUpperCase()
, çağrıldığı nesneyi değiştirmez. Doğru kod şöyle görünür:
String s = "Hello";
String result = s.toUpperCase(); // Convert to uppercase
3. Bir dizinin öğeleri olan nesneleri başlatmayı unutmak
Diğer bir yaygın hata, bir dizi değişkenini başlatmayı unutmak. Örnek:
int[] array;
array[0] = 1;
array[0] = 2;
Bu kod çalışmaz: dizi değişkenini, dizinin öğelerini depolayacak kapsayıcı nesneye yapılan bir başvuruya eşit olarak açıkça ayarlamanız gerekir.
int[] array = new int[10];
array[0] = 1;
array[0] = 2;
4. Örnek değişken yerine yerel değişken kullanma.
Acemiler, değişkenler için uzun ve anlamlı isimler bulmayı sevmezler. Sıklıkla tek harfli isimler kullanırlar: a
, b
, , vs.i
99 sayısını bir dizinin 100 hücresine yerleştirin |
---|
|
Yukarıdaki kod derlenmeyecek. Doğru sürüm şöyle görünür:
99 sayısını bir dizinin 100 hücresine yerleştirin |
---|
|
5. Bir koleksiyon öğesinin çıkarılması
Çoğu zaman, belirli bir öğenin bir koleksiyondan çıkarılması gereken durumlar vardır. Kod kabaca şöyle görünür:
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);
Bu kod çalışmaz çünkü for-each döngüsünü aynı anda bir koleksiyonun öğeleri arasında geçiş yapmak ve bu koleksiyonu değiştirmek için kullanamazsınız.
Birkaç çözüm var. İlk olarak, bir koleksiyonda gezinebilir ve diğerini değiştirebilirsiniz:
Çözüm 1 |
---|
|
İkincisi, Java 8'den bu yana koleksiyonların, removeIf()
hangi öğelerin kaldırılacağını gösteren bir kuralı (lambda işlevi) iletebileceğiniz bir yöntemi vardır.
Örnek:
Çözüm 2 |
---|
|
6. Değiştirici ile birkaç sınıfı public
tek bir dosyaya yerleştirme
Bir dosyada yalnızca bir ortak sınıf olabilir. Bir dosyada daha fazla sınıf bildirilebilir, ancak bunlar ya bir genel sınıfın iç sınıfları olmalı ya da değiştiriciye sahip olmamalıdır public
. Örnek:
Solution.java dosyasının içeriği | Not |
---|---|
|
Buna izin verilmez: tek bir dosyada iki ortak sınıf. |
|
Ama bunu yapabilirsin. Ana sınıf herkese açık değil |
|
Ve bunu yapabilirsin. Ana sınıf iç içe geçmiş bir sınıftır. |
7. Bir sınıfın olağan (statik olmayan) yöntemlerini statik yöntemden main()
çağırma
Bazen yeni başlayan programcılar, yöntemden veya diğer statik yöntemlerden statik olmayan değişkenlere ve yöntemlere erişmeye çalışır main()
. Böyle bir kod elbette çalışmaz.
public class Solution
{
public int n = 100;
public int[] createArray()
{
return new int[n];
}
public static void main(String[]args)
{
int[] array = createArray();
}
}
Ana yöntem yalnızca statik yöntemlere/değişkenlere atıfta bulunabilir. Ya da önce sınıfın bir örneğini oluşturmalı Solution
ve ancak o zaman o nesnenin statik olmayan yöntemlerini çağırmalıdır. Örnek:
Çözüm 1 | Çözüm 2 |
---|---|
|
|
8. Bir metot gibi bir yapıcı bildirmek
Diğer bir yaygın hata, yanlış bir şekilde bir sınıf kurucusu bildirmektir. Bir yapıcının adı, sınıfın adıyla aynı olmalıdır ve bir yapıcının sonuç türü yoktur. En yaygın hatalar şöyle görünür:
|
Burada bir dönüş tipi olmamalı |
|
Geçersiz kurucu adı. Yapıcının adı, sınıf adıyla eşleşmelidir. |
|
this kayıp. Değişken value kendisine atanacak |
|
hepsi doğru |
9. Arayüzlerin yanlış kalıtımı
Java'nın yaratıcıları, Java'yı İngilizce'ye çok yakın hale getirmeye çalıştılar, bu nedenle belirli ilgili kavramlar için farklı anahtar kelimeler seçtiler.
Bir sınıf bir sınıfı miras aldığında, anahtar kelimeyi kullanmanız gerekir extends
:
class Pet
{
}
class Cat extends Pet
{
}
Bir sınıf bir arayüzü miras aldığında, anahtar kelimeyi kullanmanız gerekir implements
:
interface Meow
{
}
class Cat implements Meow
{
}
Bir arabirim bir arabirimi miras aldığında, şu extends
anahtar sözcüğü kullanın:
interface Meow
{
}
interface Voice extends Meow
{
}
10. break
Açıklamada switch
atlamak
break
Ve bugün bizim için son hata, ancak yeni başlayanlar için son hata değil, bir ifadeye bir ifade eklememek switch
. Örnek
Yanlış | Sağ |
---|---|
|
|
GO TO FULL VERSION