Hatalardan korkun ama onları Java ile yazmayın! Muhtemelen Java'daki istisnalar hakkında birkaç şey biliyorsunuzdur . Bugün en azından yüzeysel bir bilgi size fayda sağlayacaktır. Error sınıfını ve yığın izlerinde göründüğünde birçok kişiyi korkutan özel bir istisna türünü inceleyeceğiz.

Java'nın istisna hiyerarşisinin en üstünde , iki türevi olan Throwable sınıfı bulunur:

  • Programınızdaki hatalardan sorumlu olan istisna .
  • Ve bugünkü kahramanımız — JVM'deki hatalardan sorumlu olan Error .
    Bunların muhtemelen kodlama hataları değil, genellikle geliştiriciye bağlı olmayan sorunlar olduğunu belirtmekte fayda var.

Bir Hatayla Ne Yapmalı?

"Hataları" yakalarken, JVM'nin kendisindeki sorunlardan bahsettiğimiz için, catch bloğunda günlük kaydı dışında herhangi bir eylem gerçekleştiremezsiniz .

Günlük tutmak iyidir: Bir çalışma zamanı hatası aldığınızda, günlüklere bakabilir, nedenini görebilir ve ne düzelteceğinizi bilirsiniz.

Kodunuzu yazarken ne tür bir hatayla karşılaşabileceğinizi bilmediğiniz için, catch bloğuna belirli bir tür yazmanın bir anlamı yoktur. Error sınıfını kullanmak da en iyi çözüm değildir, çünkü bu durumda yalnızca hataları yakalayacaksınız.

Buna göre hem Error hem de Exception yakalayabilen Throwable sınıfını kullanmak daha iyidir . Bu pratikte nasıl görünüyor?

Bunun gibi bir kod yazmak doğru değil:

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
Bunun gibi kod yazmak da uygun değil:

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
Ancak bunun gibi kod tamam:

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

Hataları işlemek için ikinci seçenek, yöntemde bir throws yan tümcesi bildirdikten sonra onları daha yükseğe fırlatmaktır . Bu teknik, kodunuz teorik olarak bir hata oluşturabilecekse ve kodunuzu kullanabilecek herkesi hatayı düzgün bir şekilde işleyebilmeleri için önceden uyarmak istediğinizde kullanılır.

Genel hatalar

En popüler hatalardan bazıları OutOfMemoryError ve StackOverflowError sınıflarıdır.

OutOfMemoryError genellikle, program nesneleri oluşturmak için yeterli belleğe sahip olmadığında ve çöp toplayıcı devam edemediğinde ortaya çıkar. Sonuç bir OutOfMemoryError'dur .

Java, bellek sızıntılarını önlemek için nesneleri el ile silmenize izin vermez, ancak çöp toplayıcıyı fazla çalıştırmamak ve yığını karıştırmamak için çöp yığınından kaçınabilirsiniz.

Örneğin, bunun gibi bir kod, bellekte çok fazla çöp oluşturacaktır:


while (true) {
    new Object();
}

Size bahsetmek istediğim ikinci hata, yığın taştığında atılan StackOverflowError hatasıdır. Yığın esas olarak yerel değişkenleri, parametreleri ve yöntem çağrılarını depoladığından, özyineleme (veya özyinelemeli bir yöntem çağrısı) bu hatanın çok yaygın bir nedenidir:


public void foo() {
    foo();
}

Program yürütme sırasında sorunlardan kaçınmak için, modern IDE'ler genellikle yöntemleri tekrar tekrar çağırma konusunda uyarır.

Hata veren bir programı düzeltemezsiniz , ancak hata atmayan ve programınızı bozmayacak bir kod yazabilirsiniz. Bellekle ne yaptığınızı izleyin, nesneleri dikkatli bir şekilde oluşturun ve yöntemleri doğru şekilde çağırın. Bunu yaparsanız, kodunuzda daha az sorun yaşarsınız.

Hata ve İstisna türleri arasındaki fark

Hata İstisna
catch bloğunda düzeltilemez Bir catch bloğunda işlenebilir
Derleme zamanında oluşmaz Derleme zamanında yakalanabilir
JVM'deki sorunlar Kod mantığındaki sorunlar
Tüm Hatalar işaretli değil kontrol edildi ve kontrol edilmedi

Java'da istisnalardan kaçamazsınız ama onlardan korkmamalısınız. Her türün neyi temsil ettiğini anlamanız ve bununla nasıl başa çıkacağınızı bilmeniz yeterlidir. Hepsi bugün için! Görüşürüz!