0

Java İstisna Yakalama İşlemeleri ( Try – Catch)

Merhaba Arkadaşlar bu yazımda programımızdaki beklenmedik durumlara karşı nasıl gardımızı 🙂 alacağız ona bakacağız.  Öncelikle istisna nedir ? bu kavrama bir açıklık getirelim ve kavram üzerinden konunun üstüne gidelim.  İstisna, normalde beklenmeyen ancak bazı durumlar karşısında meydana gelen beklenmedik durumları ifade eder. Beklenmedik durum  dedik; bir örnek verelim. Yazdığınız program internet üzerindeki bir veritabanına bağlanıp ondan gelen bilgilere göre açılıyor diye düşünelim. Siz programı yazarken internetinizin olduğundan eminsiniz ve kontrol ediyorsunuz. Peki ? kullanıcı da sizin kadar dikkatli mi acaba ? bence cevap hayır çünkü kullanıcılar sizin kadar programınızı tanımadığı için doğal olarak sizin kadar hassasiyet gösteremez , o zaman ne yapacağız ? madem kullancı hassas davranamıyor o halde programımız da hassas olmasın .  Programımız kullancıyı denetlesin ? hareketlerini takip edip ona göre refleksler versin. 

Çalıştırdığımızda eğer internet yoksa program çökecektir. o zaman siz programcı olarak bunu önceden düşünüp internetin olmama ihtimalini düşünmelisiniz ve buna karşı tedibirinizi almanız lazım yani burada olabilcek internet olmama istisnasını yakalamanız lazım. İşte bunu try-catch yapısı ile yakalabilirsiniz. 

Try -Catch yapısının mantığı şu şekilde ; try bloğunun içinde hata oluşursa bir nesne oluşturulur bunlara Exception denir. Bu oluşturulan exception nesnesi catch bloğu tarafından yakalanır. Try bloğunda hata çıkarsa hatanın oluştuğu andan itibaren catch bloğuna atlar . Şimdi bu Exception’lar neler bakalım ;

  1.     ClassNotFoundException 
  2.     IO Exception
  3.   RunTime Exception
    1. Aritmethic Exception
    2. NullPointer Exception
    3. IllegalArgument Exception
    4. … ve daha sı 

İsimlerinin  de ifade ettiği gibi 1. de kullandığımız sınıf bulunmadı hatası, 2. de Giriş çıkış işlemlerinde oluşan hata , 3.de RunTime yani Çalışma zamanı hatalarını anlatan bir exception. bunun da alt kategorileri olarak  1. de Aritmetik işlem hatası ,2 de Null deger almış bir nesne üzerinde işlem yapmaya kalkışmış olabiliriz. 3. de ise yanlış türde bir argüman gelmiş  olabilir. 

Hata yakalama kontrollü ve kontrolsüz olarak iki kısım da tanımlanabilir. Kontrollü hata yakalamada editörünüz sizi uyarır bu kodları try -catch blokları içine alın der.  Kontrolsüzde ise çalışma zamanında ortaya çıkabilecek hatalar olarak düşünülebilir. 

Şimdi bir örnek üzerinde konuyu pekiştirelim.

Şimdi burdaki hatayı yakalayalım

Evet gördüğünüz gibi hata vermesi muhtemel kodlar try {} blogu içine yazılacak. Hata oluştuğunda sistem catch(){} bloguna geçtiğinden  hata oluşunca yapılacaklarda buraya yazılmalı. Fark ettiyseniz index aşım hatasını catch bloğuna parametre olarak yolladım. 

Evet devam edelim…

Hata verebilecek kodlar try bloguna, hata oluşunca catch bloguna ve her halde çalışmasını istediklerimiz ise finally bloğuna yazılır.

Her zaman sistem istisnalarına muhtaç değiliz kendimiz de istisna oluşturabiliriz.  Exception’ların en üst sınıfı Throwable sınıfıdır onun altında Exception … diye gider . Şimdi biz kendimize has bir hata oluşturalım.

Şimdi bu hatayı fırlatacak kodlarımızı yazalım

bakın bu yukarıda throw ile hatayı fırlatıyoruz ve catch()  (“catch==yakala”) blogu ise hatayı yakaladığı gibi toString() metodunu çalıştırıyor.  Burada birden fazla hata türü için ayrı ayrı catch() bloklarıda kullandığımız dikkatinizi çekmiştir sanırım. 

Hataları ekrana yazdırmak için bazı metodları da yazıp konuyu bağlayalım

  • getMessage()
  • printStackTrace()

metodları ile ekrana hataları bastırabilirsiniz. Şimdi beginnersbook.com adlı sitede bulunan bazı örnekleri türkçeye çevirip yazalım.

Örnek 1: Arithmetic exception

Bu örnekte aritmetik işlem hatasını yakaladık. Eğer try blogu içinde aritmetik bir işlem hatası çıkarsa catch blogumuz bunu hemen yakalıyor. 

Örnek 2: ArrayIndexOutOfBounds Exception

Eğer bir dizinin içine eleman atarken dizi içinde bulunmayan bir index’e atamaya kalkarsanız. bu hatayı alırsınız.

 

admin

Bir cevap yazın

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