İleri Programlama Dersi 7. Ünite Özet

Java’da Kural Dışı Durum İnceleme

Kural Dışı Durumlar

Kural dışı durumlar, programların çalışmaları esnasındaki normal akışlarını bozan şeyleri temsil etmektedir. Bir kullanıcının hatalı veri girişi yapması, içeriğinden veri okunmak istenilen bir dosyanın bulunamaması, ağ üzerinden başka bir bilgisayar ile kurulacak bağlantıda beklenmedik sorunlar olması gibi hâllerle karşılaşıldığında programlar beklenmedik bir anda sonlanabilirler. Kural dışı durumun oluşması sonrasında, düz yazı şeklinde ve altı çizili olarak gösterilen bir takım hata mesajları ile karşılaşılmaktadır. Altı çizili alanlar, kural dışı durumların tipleri ile ilgili bilgi vermektedir.

Kural dışı durumlar, sınıflar ve onların türündeki nesneler ile ifade edilirler. Bir kural dışı durum oluştuğunda Java programlama dili bu durum ile ilgili kural dışı durumun tipi, hangi satırdaki kod çalıştırılırken oluştuğu gibi bilgileri içeren bir nesne oluşturmaktadır. Kural dışı durumlar ile ilgili Java sınıfları aşağıda verilmiştir:

  • ArithmeticException: Sıfıra bölünme ve benzeri aritmetik hatalar
  • ArrayIndexOutOfBoundsException: Dizinin olmayan elemanlarına erişilmek istenildiği
  • ClassCastException: Hatalı sınıf dönüşümü yapıldığı
  • llegalArgumentException: Metotların hatalı parametreler ile çağrıldığı
  • IOException: Temel girdi çıktı işlemlerinde problem olduğu
  • NumberFormatException: Bir metnin sayıya hatalı bir şekilde dönüştürüldüğü
  • UnsupportedOperationException: Desteklenmeyen bir operasyonla karşılaşıldığı

Java programlama dilinde, kural dışı durumları temsil eden sınıflar Throwable isimli sınıftan kalıtım yoluyla türemiş olan Error ile Exception sınıfları ve bu sınıfların alt sınıflarıdır.

Java’da kural dışı durumlar ikiye ayrılırlar. Bunlar:

  1. Checked
  2. Unchecked’tir

Checked kategorisinde, Java derleyicisi kural dışı durumların işlenmesini zorunlu kılar. Bunlara karşı bir eylem gerçekleştirilmedikçe derleyici hatası ile karşılaşılır.

Unchecked kategorisinde ise, Java derleyicisi kural dışı durumların işlenmesini zorunlu kılmaz. Derleyici hatalarına sebep olmadıkları için bu kural dışı durumların işlenip işlenmemesi programcıların tercihlerine bırakılmıştır.

Kural Dışı Durum İşleme

Kural dışı durumlar oluştuğunda bilgisayar programlarının aniden bir sistem mesajı ile sonlanmasının önüne geçmek veya mümkünse çalışmaya devam ettirilmesi için kural dışı durumların işlenmesi söz konusudur.

Java programlama dilinde, kural dışı durumlar için önlem alınması kimi durumlarda derleyici tarafından zorunlu kılınır. Kural dışı durumlara bir çözüm üretilmesi istenildiğine dair derleyici mesajı alınır ve bununla ilgili bir önlem almadan programın çalıştırılması mümkün olmaz. Ancak, Java derleyicisi birçok kural dışı durum tipinin ele alınmasını zorunlu kılmaz. Bu durumda, iki adet çözüm üretmek mümkündür. Bunlar:

  1. Try-catch blokları
  2. Throws ifadesi’dir.

Try-catch blokları kullanılırken, try ve catch blokları arasına, kural dışı durum oluşabileceği düşünülen satırlar yazılır. Catch bloğu içerisinde ise bu durum oluştuğunda yapılacaklara dair bilgiler yer alır. Catch bloğu, Exception sınıfı türünde bir parametre alır. Bu parametre, doğrudan Exception sınıfının kendisi veya bu sınıftan kalıtım yoluyla türeyen diğer sınıflardır. Java içerisinde kullanımı,

try {

// Kural dışı durum oluşabilecek satırlar

} catch (Exception e) {

// Kural dışı durum oluştuğunda yapılacaklar

}

şeklindedir.

Finally bloğu, kural dışı durum oluşup oluşmadığını düşünmeksizin çalışmasını istediğimiz bir takım program kodları için kullanılmalıdır. Finally bloğuna ait bazı özellikler aşağıda verilmiştir:

  • Üzerinde işlem yapılan açık bir dosyanın kapatılması veya kullanılan bir takım değişkenlerin bellekten temizlenmesi gibi farklı amaçlar için de kullanılabilir.
  • Try-catch bloğunun hemen sonrasında kullanılır.
  • Kural dışı durum oluşup oluşmamasından bağımsız olarak try bloğunun çalıştığı her durumda finally bloğunun mutlaka çalıştığını göstermektedir.

Java içerisinde kullanımı; try {

// Kural dışı durum oluşabilecek satırlar

} catch (Exception e) {

// Kural dışı durum oluştuğunda yapılacaklar

} finally {

// Her durumda mutlaka çalıştırılacaklar

}

şeklindedir.

Throws, derleyicinin ele alınmasını zorunlu kıldığı checked kural dışı durum kategorisindeki durumlar için kullanılmaktadır. Derleyici, kimi zaman yazılan kodun kural dışı durum üretme potansiyeli olduğunu görür ve programı yazan kişiye bir uyarı gönderir. Bu durumda, uyarıyı giderecek bir aktivite yapmadan program çalıştırılamayacaktır. Bu durumda throws anahtar kelimesine ilgili metodun tanımında yer vermek gerekecektir. Throws anahtar kelimesi kullanarak doğrudan bir çözüm üretilmez, sadece bu hatanın bilindiği ve ihmal edilmek istendiği derleyiciye bildirilmiş olur.