JAVA ProgramlamaKategori dışı

Java’da İstisnalar

image_pdfimage_print

Java’da İstisnalar

Merhaba,

Bu bölümde Java’da İstisnalar (Exceptions) konusunu anlatacağım. İstisna, işlerin kontrolden çıkarak beklenmeyen durumlarda ortaya çıkamasıdır. Java’da istisna işleme konusunda 5 anahtar sözcük kullanılmaktadır. Bunlar; try-catch, throw, throws, finally ‘dir.

Try — Catch Blokları

İstisnaların oluşma aşamasını incelersek;
1- İstisna meydana geldiğinde ilk olarak bir nesne oluşturulur.
2- Bu istisnayı yakalamak için catch bloğu olup olmadığı kontrol edilir. Catch bloğu varsa uygulama sonlanmaz bu catch bloğundan devam eder.
3- Beklenen Catch bloğu yok ise istisna; istisnanın meydana geldiği komuta çağıran satıra istisna nesnesi fırlatılır.
4- Şayet söz konusu istisnanın old. komutu çağıran komut satırında ilgili istisnaya ait catch bloğu var ise uyg. bu catch bloğundan devam eder.
5- Burada da catch bloğu yoksa istisna oluşturulduğu metodu çağıran bir üst metoda fırlatılır. Catch olup olmadığı kontrol edilir varsa buradan yoksa bir üst metoda fırlatılır bu işlem uygulamadaki main metoduna kadar devam eder yoksa uygulama sonlanır.

İstisna Sınıfları

İstisnaların yakalanarak ele alındığı sınıflardır. Bu sınıflar en süper sınıf olan Object sınıfından türetilmiş THROWABLE sınıfından türetilmektedir. Throwable sınıfı 2 alt başlıkta toplanır. Error ve Exception sınıfları. Error sınıfı sistem kaynaklı sorunlar meydana geldiğinde çalıştırılmaktadır. Bu durumda yazılımcıların birşey yapması imkansızdır. Exception sınıfı ise çalışma sırasında oluşan hataları ele almaktadır. Bu hatalar çoğunlukla uygulama geliştirilirken yapılan hatalardan kaynaklanmaktadır.

Kontrollü İstisnalar: Derleyicinin try-catch bloklarını kullanmaya zorlandığı istisna şeklidir.

Kontrolsüz İstisnalar: Derleyicinin try-catch bloklarını kullanmaya zorlamadığı istisna şeklidir.

 

İstisna Hiyerarşisi

Bütün istisna sınıfları, java.lang.Exception sınıfının alt türleridir. Exception sınıfı, Throwable sınıfının alt sınıfıdır. Throwable sınıfından elde edilen diğer bir alt sınıfta Error sınıfıdır. Hatalar, normalde Java programları tarafından tutulmazlar. Bu koşullar normalde java programları tarafından işlenmeyen ciddi başarısızlık durumunda meydana gelirler. Hatalar, çalıştırma ortamı tarafından oluşturulan hataları belirtmek için oluşturulur.Örnek: JVM belleği tükenmiş. Normalde programlar hatalardan kurtulamaz.Exception sınıfı iki ana altsınıfa sahiptir:

  • IO Exception Sınıfı
  • RuntimeException Sınıfı

Java Dahili İstisnaları

En genel istisnalar, standart tip RuntimeException sınıfının alt sınıflarıdır. Java, çeşitli sınıf kütüphaneleri ile ilgili bir çok türde istisna tanımlar. Aşağıdaki liste, Unchecked RuntimeException’ları göstermektedir.

İstisna Açıklama
ArithmeticException Aritmetic hata, sıfıra bölünme gibi
ArrayIndexOutOfBoundsException Dizi index’i sınırların dışında.
ArrayStoreException Dizi elemanına uyumsuz türde atama.
ClassCastException Geçersiz cast.
IllegalArgumentException Metodu çalıştırmak için illegal argüman.
IllegalMonitorStateException Illegal monitor işlemi, unlocked bir thread üzerinde bekleme gibi .
IllegalStateException Ortam veya uygulama doğru olmayan durumda.
IllegalThreadStateException İstenen işlem anlık thread durumu ile uyumlu değil.
IndexOutOfBoundsException Bazı türde index sınır dışında.
NegativeArraySizeException Dizi negatif boyutta yaratılmış
NullPointerException Null referansının geçersiz kullanımı.
NumberFormatException Bir string’in sayısal formata geçersiz dönüşümü
SecurityException Güvenlik ihlali denemesi.
StringIndexOutOfBounds Bir stringe sınırları dışında index verme
UnsupportedOperationException Desteklenmeyen işlem karşılatırıldı.

Aşağıdaki liste, Javada ki CheckedException’ları göstermektedir:

İstisna Açıklama
ClassNotFoundException Sınıf bulunamadı.
CloneNotSupportedException Nesne kopyalama, Kopyalanabilir arayüzde uygulanamadı.
IllegalAccessException Sınıfa erişim engellendi.
InstantiationException Abstract bir sınıf veya arayüzde nesne oluşturma.
InterruptedException Bir thread, diğer bir thread tarafından kesildi.
NoSuchFieldException İstenen dosya yok.
NoSuchMethodException İstenen metot yok.

 

 

 

İstisna Sınıflarında Ortak Kullanılan Metotlar

getMessage() metodu: İstisna nesnesi içersindeki mesajı döner.
toString(): istisna mesajını istisna adını ili nokta ve arada bir boşluk ile döner.
printStackTrace(): oluşan istisnanın bilgilerini aşama aşama ekrana yazdırır.
getStackTrace(): oluşan istisnanın bilgilerini aşama aşama stacktrace tipinde bir dizi olarak döner.

 

İstisna Oluşturma  

Uygulamalarda sıkça karşılaşılan istisnalar, çalışma zamanı (run time) istisnalarıdır. Biraz sonra örnekleyeceğimiz gibi, mevcut olmayan dizi elemanlarına erişim bir çalışma zamanı istisnasıdır. Veya açmaya çalışılan dosyanın yerinde olmaması, ağ bağlantısının kopmuş olması vb. türü durumlar da çalışma zamanı istisnalarına örnek verilebilir. Aşağıda verilen örnekte, olmayan bir dizi elemanına erişilmeye çalışılmıştır.

İstinaları Yakalamak

Bir metot, try ve catch anahtar kelimelerinin kombinasyonunu kullanarak bir istisnayı yakalayabilir. Try/catch bloğu, istisna oluşması muhtemel kodun etrafına yerleştirilir.
Try/catch bloğu içindeki kod, korumalı kod(protected code) olarak adlandırılır ve
try/catch kullanımı aşağıdaki gibidir:

Bir catch ifadesi, yakalamak istediğiniz istisnanın deklare edilmiş türünü içerir. İstisna korumalı kod içinde oluşuyorsa, catch bloğu(veya blokları), try bloğunu kontrol eder. Eğer istisna türü catch bloğu içinde listelenmiş istisnalardan biriyse, istisna catch bloğuna geçirilir.

Throw Exceptions

Throw ifadesini kullanarak açıkça bir hata fırlatılabilir.

Throws Exceptions

Eğer bir metot istisnaya sebep olabilirse, metot çağırıcılarına karşı kendini koruyabilmesi adına, metodun bu davranışı belirtmesi gerekir. Bunu aşağıdaki biçimde yapabiliriz

finally Anahtar Kelimesi

İstisnaları yönetirken tanımladığı- mız try-catch bloğu, istisna oluş- ması durumunda catch bloğunun çalışması sağlanıyordu. Ancak istisna oluşsun veya oluşmasın, her koşulda çalışmasını istediğimiz kodları finally bloğuna tanımlamalıyız. finally bloğuyla ilgili aşağıdaki grafiği inceleyelim. Yandaki verilen grafiği inceledi- ğimizde try-catch tanımlaması ile bitişik yer alan finally bloğu yer alıyor. Uygulamanın akışı try bloğuna girdiğinde, bu blok içerisinde istisna oluşmadığı takdirde uygulamanın akışı try bloğunu bitirir bitirmez finally bloğuna dallanacak ve bu bloktaki kodlar çalışacaktır. Farz edelim ki; try bloğu içerisinde bir istisna oluştu ve uygulamanın akışı catch bloğuna dallandı. catch bloğu sonuna gelindiğinde uygulama akışı finally bloğuna dallanacak ve buradaki kodları çalıştıracaktır. Akabinde uygulama akışı try-catch-finally bloğu dışında kaldığı yerden devam edecektir. Gördüğünüz gibi her iki durumda da finally bloğu çalıştı.

 

ÖRNEKLER

Try – Catch

Bu örnekte iki tane catch(istisna) tanımladık, döngüde sadece tanımladığımız kadar istisna olur.

Try – Catch – Finally

Bu örnekte ise finally,tanımladığımız hatalar olmasa bile programın sonunda sanki bir hata varmış gibi ya da hata olsa bile sanki tanımlanmamış farklı bir hata varmış gibi davranır.

Throw

Programımızın açıkça throw ifadesini kullanarak bir istisnayı fırlatmasıda mümkündür.

Throws

Eğer bir metot yönetemediği bir istisnaya neden olursa, metot çağırıcılarının kendilerini bu istisnaya karşı koruyabilmeleri için, metodun bu davranışı belirtmesi gerekir. Bunu, metodun deklarasyonuna bir throws cümleciği ekleyerek yapabilirsiniz.

Kaynakça :

http://javayaz.com/?page_id=100

https://medium.com/gokhanyavas/javada-i%CC%87stisnalar-f7ec3838a623

https://www.dijitalders.com/icerik/44/3690/javada_try_catch_finally_ve_throw_throws_kullanimi.html

Java 8 : standard edition ders kitabı

 

Hazırlayan : Alpay Aygün
3
0

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir