Exception Handling

   Exception Handling

                                                              Exception Handling
Exception calisma durumunda meydana gelen hata durumudur. Pascal ,C gibi exception handling'i desteklemeyen dillerde olusabilecek hatalarin denetimi elle yapilmaktadir. Bu
zahmetli durum JAVA programlama dilinde nesne yönelimli çalisma zamani hatalari yönetimi kullanilarak onlenir.

  • En cok karsilasilan hata turleri dizinlerde index degerinin siniri asmasi, aritmetik islemlerde degisken degerlerinin sinirin disina cikmasi, sifira bölme, hatali metod parametreleri ve bellek tükenmesi.
  • Javanin hata ayiklama islemi, bütün tip hatalarinin yakalanmasini saglar. Bu, programlari daha dayanikli ve güçlü yapar. Hatalar, exceptions sinifindan türetilmis siniflarin nesneleridir.
  • Hata ayiklamanin diger bir manasi kontrolün bir metoddan döndürülmesidir. Normalde, bir hata meydana geldigi zaman, bu hata ile ilgilenen bir metod cagrilir. Eger bu metod hata ile ilgilenmezse, yeni bir kod daha cagrilir.. Bu zincir bu ºekilde devam eder.

 

Exception Handling ne zaman kullanilir
Hata giderme asagidaki durumlarda kullanilmalidir:

  1.  Sadece istisnai durumlari incelemek için
  2. Program parçalari arasindaki hatalari gidermek için
  3.  Metodlar, siniflar, kütüphaneler gibi yazilim parçalarinin hatalarini gidermek için
  4.  Genis projelerde projenin düzgün dagilimini saglamak için.

 

Java’da hata yakalamanin temelleri

Hata üretecek kod bir "try" blogu içine konur. Try blogunun ardindan hemen bir veya daha fazla "catch" blogu gelir. Her bir catch blogu yakalatip isleyebilecegi hatalari belirler. Son catch blogundan sonra, bululup bulunmamasi önemli olmayan fakat bulundugu taktirde mutlaka calistirilacak olan "finally" blogu yer alir. Bir hata yakalandigi zaman, kontrol try blogundan
ayrilip, hata için uygun catch blogu aranir. Eger hatanin tipi catch bloklarindan birine uyarsa, catch bloktaki kod calistirilir. Eger hiçbir catch blogu bulunmazsa, program son catch blogundan
sonra devam eder. Eger son catch blogundan sonra finally blogu varsa, bu kod calistirilir. Bir hata metod içerisindeki bir try blogunda yakalanabilecegi gibi, metod tarafindan dogrudan
veya dolayli yolla çagrilan bir try blogu tarafindan da yakalanabilir. Hatanin yakalandigi noktaya "throw point" denir.

 

Java Dilindeki Hata Paketi

  • LinkageError
  • ClassCircularityError
  • ClassFormatError
  • IncompatibleClassChangeError
  • AbstractMethodError
  • IllegalAccessError
  • InstantiationError
  • NoSuchFieldError
  • NoSuchMethodError
  • NoClassDefFoundError
  • UnsatisfiedLinkError
  • VerifyError
  • ThreadDeath
  • VirtualMachineError(Abstract Class)
  • InternalError
  • OutOfMemoryError
  • StackOverFlowError
  • UnknownError
  • AWTError (in java.awt)

 

Exception cesitleri
Java bircok farkli exception nesnesi icerir.Bunlardan bazilari bu hatayi "throw" eden bir fonksiyon kullanici tarafindan tanimlandiginda kullanicinin ele almasi gereken durumlardir.
Bellek tukenmesi,sifira bolme gibi bazi durumlarda ise sistem otomatik olarak bir hata yakalama mekanizmasi olusturur.

 

                                             

                                              

Exception handling’deki blok tanimlari
try bloklari
Bir hata meydana geldigi zaman try blogu icindeki bir catch blogu tarafindan yakalanir.
try { ....
}
catch(){ ....
}


Eger bir try blogu calistirilip ,hicbir hata ile karsilasilmazsa kontrol son hata yakalayicidan sonraki ilk koddan devam eder.Eger finally blok varsa bu blok calistirilir.

BIR EXCEPTION'IN ORTAYA ATILMASI
Hata ayiklama islemi bir hata meydana geldigi zaman calistirilir. Buna "throwing an exception" denir. Hata ayiklama kodu ayiklama isleminin nesnesini belirler. Islenen hata throwable sinifindan türetilmis herhangi bir sinif olabilir. Throwable sinifinin iki alt sinifi "Exception" ve "Error" dir.Error genellikle sistem problemleriyle ilgilenir. Exception ise birçok java programcisinin arzu ettigi problemlerle ilgilenir. Bir hata durumu yakalandigi zaman kontrol o anki try blogu içindeki uygun bir catch blogundan devameder. Eger böyle bir catch yoksa bir sonraki try blogundan devam eder.

 

Throws kelimesi
Bir throws clause bir metod tarafindan hangi hatalarin yakalabilecegini listeler. int g(float h) throws a,b,c { //method body } Bazi hatalar calisma zamaninda meydana gelir. Bunlara "RunTimeExceptions" denir.


Bir Exception’un yakalanmasi
Hata giderici kodlar "catch" bloklari icerisinde yer alir. Her catch blogu "catch" kelimesiyle baslar. Catch blogundaki hatanin tanimini yapan sinif ismi ve parametre ismi vardir.
Hata ile hiçbir hata giderme kodu uymayabilir.Bu aramanin bir sonraki try blogund an devem etmesini saglar. Bu islem sonunda hata ile uyan hicbir catch blogu bulunmazsa, GUI tabanli
olmayan bir program calisir. Apletler ve GUI tabanli programlar olay isleminin sonucunu gönderirler.


FINALLY BLOGU
Bir exception oldugu zaman metottaki isleyis ani ve dogrusal olmayan bir yola girer.Metodun kodlanmasina bagli olarak bir exception'in zamansiz bir sekilde geri donmesine bile sebep
olabilir.Mesela bir metot giriste bir dosyayi aciyor ve cikista kapatiyorsa exception-handling mekanizmasinin bu dosyayi kapatan kodu gecmemesi gerekir.Finally anahtar kelimesi bu ihtimal
icin tasarlanmistir. Finally blogu istege baglidir.Eger varsa "try" blogunun catch tumcesinden sonra yer alir.Java, eger bir finally blogu varsa, try blogu ve onun catch bloklari icinde bir exception ele alinmasina bakmadan, finally blogunun isletilecegini garanti eder. Bir try blogundan finally blogunu islemeden cikmak mümkün degildir.

 

CONSTRUCTER VE FINALIZER'LAR
Bir constructor içinde bir hata farkedilirse ne olur? Problem constructor bir deger döndürmez, o zaman programin nesnenin düzgünce olusturulup olusturulmadigini bilmesini nasil saglayacagiz? Bir tasari, kötü olusmus nesneyi metoddan döndürmek ve bunu kullanan nesnelerin bu nesnenin düzgün olup olmadigini anlayacak testler yapiyor olmasini ummak. Diger bir tasari, constructor disinda global bir degisken tanimlamak, ama bu da zayif bir programlama yolu. Contructor'larda ortaya atilan exceptionlar nihai garbage koleksiyonu için isaretlenen nesnelerin parçasi olarak olusturulmasina sebep olurlar. Her bir nesne garbage koleksiyonuna atilmadan, onun finalizer'i cagrilir. Bir defa daha, Java garbage koleksiyonuna atilacak nesnelerin sirasini garanti etmez ve sonuç olarak cagrilacak finalizer'larin sirasini da garanti etmez.

 

BUILT-IN EXCEPTION'LAR
Java'nin java.lang paketi içinde standart olarak tanimlanmis bir cok exception sinifi vardir.En cok kullanilanlar RuntimeException tipinin alt siniflaridir.Java.lang java programlarina otomatik
olarak getirilir. Ayrica herhangi bir metodun throws listesinde bulunma zorunlulugu da yoktur.Java'da Java.lang'in disinda baska exception paketleri de vardir.Asagida Java dilinde
kullanilan built- in exception'larin listesi sunulmaktadir.

 

Java.Lang Paketi'ndeki Exception'lar

  • IllegalAccessException
  • InstantionationException
  • InterruptedException
  • NoSuchMethodException
  • ArithmeticException
  • ArrayStoreException
  • ClassCastExeception
  • IllegalArgumentException
  • IllegalThreadStateException
  • NumberFormatException
  • IllegalMonitorStateException
  • IndexOutOfBoundException
  • ArrayIndexOutOfBoundException
  • StringIndexOutOfBoundException
  • NegativeArraySizeExecption
  • NullPointerException
  • SequrityException

 

Java.Util Paketindeki Exception'lar

  • RunTime Exception
  • EmptyStackException
  • NosuchElementException
  •  

Java.io Paketindeki Exception'lar

  • Exception
  • IOException
  • EOFException
  • FileNotFoundException
  • InterruptedIOExzception
  • UTFDataFormatException

 

Java.net Paketindeki Exception'lar

  • Exception
  • IOException
  • MalFormedURLException
  • ProtocolException
  • SocketException
  • UnknownHostException
  • UnknownServiceException

 

Yeni Exception siniflari yapma

Java' nin icinde yaygin hatalara yonelik exception siniflari tanimlanmistir.Ancak kullanici bazi ozel durumlarda kendi exception siniflarini tanimlamak isteyebilir.Bu gibi durumlarda yapilmasi
gereken sey Throwableicinde bir alt sinif tanimlamaktir. Yaratilan alt siniflari mutlaka kullanma zorunlulugu yoktur.Amac sisteme varliklarini bildirmektir. Exception sinifi kendisinin hiç bir sinifini tanimlamaz.Gerekli olanlari Throwable'dan saglar. Böylece bütün exception'lar kendi yarattiklarimiz dahil, Throwable tarafindan tanimlanan metodlari kullanabilecek hale gelir. Ayrica yarattigimiz exception siniflarinin bir veya bir kaç metodunu hükümsüz kilabilir, kendimiz yeniden yazabiliriz.


Yaygin super siniflardan cesitli exception siniflari türetilebilir. Eger bir catch metodu bir super sinif tipinin exception neenelerini yakalamak için yazilmissa, bu ayrica bu super sinifin alt
siniflarinin nesnelerini de yakalayabilir. Bu yaklasim, baglantili hatalarin kalitsal isleyisine izin verir. Exception'larla kalitimi kullanmak, exception handler'in ilgili hatalarini kisa bir gösterim
ile algilamasina olanak saglar. Bütün alt siniflar icin ayridir.

 

                                                   

                                                   

                                                   

 

Henüz Yorum Yapılmamış, İlk Yorumu Siz Yapın

Yorum Yollayın