Stream API

Java Exception Handling

Java Kotlin Eğitimi

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Java Exception Handling yani Java Hata Yakalama konusuyla devam ediyoruz.

Java’da yazmış olduğumuz kodun sağlıklı bir şekilde yaşamına devam etmesi için Exception Handling konusu çok önemlidir. Aksi takdirde farklı sebeplerden bir hata aldığımızda geliştirmiş olduğumuz kod yaşam döngüsünü sonlandıracak ve mobil uygulamamız, web sitemiz veya masaüstü uygulamamız çalışamaz hale gelecektir. Bu gibi durumlar son kullanıcı gözünde hiçte hoş karşılanmamaktadır. Burada yazılımcılara büyük görev düşmektedir. Her ne kadar yazılımcı hata durumlarına yüzde yüz önlem alamayacak olsa da bu oranı olabildiğince yüksek tutmak son kullanıcının hatasız bir şekilde uygulamayı tecrübe etmesini sağlayacaktır. Java Exception Handling konusunun son kullanıcıdan çok yazılımcıları etkileyen bir yönü de Throw Exception (Hata Fırlatma) konusudur. Hata fırlatma özelliği yazılımcının işini kolaylaştıran aynı zamanda hataları kendi koduna göre özelleştirmesini sağlayan bir özelliktir. Bu şekilde bir hata alındığında hata logları yazılımcı için daha okunaklı bir hal alacaktır.

Java Kotlin Eğitimi

Java Exception Handling (Hata Yakalama)

Exception sınıfları Java’da diğer sınıfların üretildiği Object sınıfından türemektedir. Throwable sınıfı Object sınıfının bir alt sınıfıdır. Throwable sınıfından ise Exception sınıfı türer Exception sınıfından da bildiğimiz checked ve unchecked olarak bilinen diğer Exception sınıfları türetilir. Aşağıdaki grafik yazılanları daha net bir şekilde görmenize yardımcı olacaktır.

Java Exception Handling
Java Exception Handling

Yukarıdaki görselde mavi renkte gösterilen Error ve Runtime Exception ve Runtime Exceptiondan türeyen alt Exception sınıfları Unchecked Exception olarak işaretlenmiştir. Kırmızı renkte olan Exception sınıfıları ise Checked Exception olarak işaretlenmiştir.

Checked Exceptions

Checked Exception Java’da kod geliştirme esnasında try-catch-finally bloğu içerisinde yakalanan ve daha sonra işlem yapılabilen, istenildiği takdirde bypass edilerek programın çalışmasına belkide kullanıcının hiç haberi olmadan devam edilmesini sağlayan exception çeşitleridir. Checked Exception alındığında çalışma anında düzeltme yapıp düzgün parametrelerle kodun çalışmasına devam edilebilir. Checked Exception sınıflarının tamamı Exception sınıfından türetilmiştir. Gelişmiş IDE’ler sayesinde checked exceptionların kontrolleri daha kolay bir şekilde sağlanmaktadır. Eğer kodunuzu notepad ile değilde daha gelişmiş bir IDE  ile geliştiriyorsanız (örn: intellij idea, eclipse, netbeans) ve yazdığınız kodda Checked Exception varsa IDE sizi uyarıyor ve bu fırlatılan exception’ ı handle etmeniz yani yakalayıp gerekli işlemi yapmanız gerektiğini söylüyor. İşte bu durumda yazılımcılar olarak bizler, ya exception’ ın fırlatıldığı satırı try-catch bloğu içine alıyoruz ya da bir üst metoda throws ediyoruz.

 

Unchecked Exceptions

Unchecked exception tipinde Runtime Exception Java’da yine kod geliştirme esnasında try-catch-finally bloğuyla yakalanabilir ve checked exception tipinde olduğu gibi istenildiği gibi işlem devam ettirilebilir. Fakat kodu geliştirme esnasında IDE yazılımcıyı uyarmaz. Yani orada bir hata olacağı geliştirme esnasında değil çalışma esnasında ortaya çıkar. Bir ArrayList nesnesi oluşturup içerisine 5 adet değer koyulduktan sonra, ArrayList nesnesi içinden 6. değer çağrıldığında, yukarıdaki görselde gördüğümüz mavi işaretli IndexOutBoundException sınıfından türetilmiş, ArrayIndexOutOfBoundException sınıfından hata fırlatılır. Elbette geliştirme esnasında buradaki ArrayList nesnesinden elemanın çekildiği satır try-catch bloğuyla kontrol edilebilir, fakat bunu geliştiricinin ön görmesi gerekmektedir.

Bir diğer unchecked exception türü olan Error sınıfları ise kod geliştirme esnasında veya çalışma esnasında yazılımcının yakalayamacağı, problemin diğer Exception türlerine göre daha ciddi olduğu durumları yansıtmaktadır. Kodun çalışması esnasında Java virtual machine içinde uygulamanın çalıştırılması için ayrılmış bellek alanın dolması sonucu OutOfMemoryError fırlatılır. Bu hatayı kod içinden yakalamamız mümkün değildir. Önüne geçmek için çalışmalar yapabiliriz, mesela belliği kontrollü kullanırız veya uygulamayı ayağa kaldırırken bellek alanını genişletiriz fakat eğer bu hata alınmışsa uygulamanın kapanmaktan başka çaresi kalmamıştır.

 

Kod Örnekleri

Şimdi örnek kodlarla yukarıda bahsettiğimiz Checked ve Unchecked Exception durumlarını ele alalım;

 

CheckedException olarak aşağıdaki örneği inceleyebiliriz;

 

Unchecked Exception olarak aşağıdaki örneği inceleyebiliriz;

Kodda geliştirme esnasında hiç bir hata ile karşılaşılmaz. Bu kodu alarak kendi IDE’nize yapıştırabilir ve geliştirme anında hiç bir hata olmadığını görebilirsiniz. Fakat kodu çalıştırdığınızda aşağıdaki gibi bir çıktı ile karşılaşırsınız.

 

Java Throw Exception

Yazımızın şimdiye kadarki kısmında fırlatılan hataları yakaladık veya bir üst metoda işlem yapması için biz fırlattık. Bu bölümde kendi geliştirdiğimiz ve hata ile karşılaşılması muhtemel olan bir kod parçası yazdığımızı düşünelim. Bu kodu kullanarak uygulama geliştirecek diğer yazılımcıları uyarmamız gerekebilir, yada bu hata ile karşılaşıldığında ne yapılması gerektiğini kodu bizden sonra geliştirecek kişiye bırakabiliriz. Bu durumu kod ile örneklendirerek anlatmaya çalışırsak;

Öncelikle kendimize ait bir exception sınıfı oluşturabiliriz,

Ardından bir dosya okuma metodu yazarak hata alınması durumunda kendi exception sınıfımızdan bir exception fırlatabiliriz,

Son olarak bir metot yazarak bu metodu tetikleyebiliriz,

Eğer aradığımız yerde test.txt gibi bir dosya yoksa aşağıdaki gibi bir çıktı alırız;

 

Küçük ölçekli projelerden çok daha büyük ölçekli projelerde kendi exception sınıflarımızı yazmamız daha büyük önem taşımaktadır. Bu şekilde hataların daha kolay kontrol edilebildiği bir yapı kurulabilir.

 

Sonuç

Java Exception Handling kod geliştirme işlemlerinde büyük önem taşımaktadır. Hataları yakalamak veya hataları fırlatmak ile kod üzerinde kurulan kontrol mekanizmaları sonucunda, kullanıcının önüne onlarca belki de yüzlerce satır hata log u getirmek yerine bir tool box içerisinde işlemin başarısız olduğu belirtilebilir. Örneğin uygulamanın loglamasıyla ilgili bir hata oluştu, bu kullanıcıyı ilgilendiren bir durum değil, sistemin bu hata sebebiyle kullanıcı tarafına hata log u basması yerine bu hatayı bypass ederek sadece yazılımcının haberi olmasını sağlayarak çalışmasına devam edebilir. Bu gibi kritik durumların çözülmesi için geliştirdiğimiz kodlarda Java Exception Handling konusuna büyük önem vermeliyiz.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Java Dersleri için tıklayınız..

Eren Başaran

Software Developer @HAVELSAN,
Mobilhanem Yazarı

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?