NİŞANTAŞI ÜNİVERSİTESİ NESNEye yönelİk PROGRAMLAMA İSTİSNA TANIMLAMA, FINALLY BLOĞU NİŞANTAŞI ÜNİVERSİTESİ © İktisadi, İdari ve Sosyal Bilimler Fakültesi iisbf.nisantasi.edu.tr
İSTİSNA TANIMLAMA Yazdığımız ve yazacağımız tüm komut satırları aslında bir metot içerisinde çalışırlar. Bu metotların işleyişleri esnasında oluşabilecek kontrollü istisnaları belirtmek gerekir. Bu işleme istisna tanımlama ya da önlem alma diyebiliriz. Yani istisnası tanımlanan bir metodu çağırabilecek diğer metotlara söz konusu metotta meydana gelmesi muhtemel hatalar hakkında bilgi verilmektedir.
İSTİSNA TANIMLAMA ErisimBelirleyiciler MetodDonusTipi MetodAdi()throws istisna,istisna1 { Metod'un Gövdesi } Yukarıdaki kalıp ile oluşturulur. Şayet birden çok istisna tanımlanacaksa, virgülle throws kelimesinden sonra devam edilir:public static void metod() throws IOException,ClassNotFoundException Bu metotta beklenmeyen eleman ve bulunamayan sınıflara karşı dikkatli olunması için diğer metotlara uyarı yapılmaktadır.
İSTİSNA TANIMLAMA Burada throws anahtar kelimesi nedeni ile hata nesnesi derleyici tarafından oluşturulmaktadır. Bizler throw kelimesini kullanacağız: Public static void method(int x) { if(x<0){IOException istisna = new IOException ("Beklenmeyen argüman"); throw istisna; } Görüldüğü gibi burada istisna nesnesi tarafımızdan oluşturuldu
İSTİSNA TANIMLAMA İstisna Sınıfının Yapılandırıcıları: Tüm istisna sınıfları 2 yapılandırıcı barındırırlar. Bir tanesi hiçbir parametre almayan yapılandırıcı diğeri ise istisnanın açıklandığı String tipinden parametre alan yapılandırıcıdır. Bu parametre istisnanın mesaj alanına atanmakta ve getMessage yöntemi ile alınmaktadır.
İSTİSNA TANIMLAMA Error ve Exception sınıfına ait birkaç alt sınıfı inceleyelim. 1-Error Sınıfı: 1.1 VirtualMachineError: JVM’nin çalışmasını etkileyen durumları inceler. 1.2 AWTError: Grafik arayüze ait hataları inceler. 1.3 OutOfMemoryError: Bellek yetersizliği durumularını inceler.
İSTİSNA TANIMLAMA 2- Exception Sınıfı: 2.1ClassNotFoundException Sınıfı: Olmayan bir dosyaya erişime isteği durumlarını inceler. 2.2 IOException Sınıfı: Giriş-Çıkış işlemlerindeki istenmeyen durumları inceler. 2.3 RunTimeException Sınıfı: Çalışma zamanı hatalarını inceler. 2.3.1 AritmeticException Sınıfı: Aritmetik hatalarda fırlatılır. 2.3.2 NullPointerException: Herhangi bir nesneye null referanslı bir değişken ile ulaşılmaya çalışılan durumlarda fırlatılır. 2.3.3 IllegalArgumentException: metotlara geçersiz argüman atamalarında fırlatılır.
İSTİSNA SINIFLARINDA ORTAK KULLANILAN METOTLAR Bu metotlar istisna sınıfının en tepesindeki süper sınıfları olan throwable sınıfında bulunmaktadırlar. getMessage() metodu: istisna nesnesi içerisindeki mesajı döner. toString() metodu: istisna mesajını, istisna adını iki nokta ve arada bir boşluk ile döner printStackTrace(): oluşan istisnanın bilgilerini aşama aşama ekrana yazdır. getStackTrace():oluşan istisnanın bilgilerini aşama aşama stacktrace tipinde bir dizi olarak döner.
ÖRNEK-7 Bir personel sınıfımız olsun. Personel sınıfında yaş tayini yapalım ve negatif sayılarda hata yakalayalım. Buna göre personel sınıfında: Üye değişkenler (veri alanı) oluşturulmalıdır. Varsayılan yapıcı (default constructor) oluşturulacaktır. get ve set metotları bulunacaktır. Set metodunda negatif değerler atanması durumuna karşı sınırlama getirilmelidir. Set metodunda beklenmeyen bir atamada hata nesnesi fırlatılmalıdır. Parametre alan yapıcı set metoduna göre düzenlenmelidir. Main metodunda personel sınıfına ait bir nesne oluşturunuz. Bu nesneye değişik yaşlar atayıp, try-catch bloğu sayesinde personel sınıfında fırlatılması muhtemel hata nesnesini yakalayınız.
ÖRNEK-7
ÖRNEK-7
ÖRNEK-7 Görüldüğü gibi personel yaşına -35 atandığında hata nesnesi fırlatıldı ve try-catch bloğunda bu hata nesnesi yakalandı. İlk hata mesajı getMessage() metodu tarafından ekrana getirildi. İkinci ve açıklamalı olan hata mesajı ise toString() metodu tarafından ekrana getirildi.
FINALLY BLOĞU Herhangi bir istisna oluşsun ya da oluşmasın bazı işlemlerimizin devam etmesini isteyebiliriz. Bunun için try-catch bloklarından sonra bir de finally bloğu oluşturmalıyız. Bunun için kullanılan kalıp şöyledir: try{ istisnaya sebep olabilecek komutlar } catch(IstisnaTürü istisnaNesnesi){ istisnanın yakalanması ve ele alınmasını sağlayan komutlar finally{ her durumda çalışması istenilen komutlar
ÖRNEK-8 Bir dizi oluşturarak, bu diziye ait olmayan elemana ulaşma istenildiğinde oluşan hata üzerinden finally bloğunu inceleyelim.
ÖRNEK-8
ÖRNEK-9 8. örnekte catch bloğumuzda beklenen istisnaya ait sınıfı yanlış girdiğimizi düşünelim. Bu yanlıştıktan dolayı catch bloğu çalışmayacak ve istisnayı ele alamayacağından uygulama hata anında sonlanacak mıdır? İnceleyiniz.
ÖRNEK-9
ÖRNEK-9 Uygulama çalıştığında hata meydana gelmesi durumunda bile finally bloğu çalışmaktadır. Uygulama olmayan dizi elemanına ulaşmak isteyene kadar düzgün çalıştı. Hata meydana geldiğinde hata nesnesini fırlattı ve finally bloktan devam etti. Dikkat edilmesi gereken finally bloktan sonraki komut satırı hatadan sonra geldiği için çalıştırılmadı, yani main metot sonunu göremedik.
ÖRNEK-10 Kendimize ait bir exception sınıfı oluşturalım ve personel sınıfı hatalarını yakalayalım. BeklenmeyenDurum sınıfımızı exception sınıfından türetelim. Üye değişkenlerimizi (veri alanlarımızı) oluşturalım. Parametre alan yapıcı yöntemi oluşturalım. Yapıcı yöntemin int tipinde yaş isminde bir parametresi olsun. Parametre alan yapıcımızda süper sınıfımızın yapıcısını çağıralım. Süper sınıfımızın yapıcısındaki argümanı istisna nesnemizin getMessage metoduna atayalım.
ÖRNEK-10 Personel sınıfımızı oluşturduğumuz yeni istisna sınıfına göre yazalım. Buna göre Personel sınıfında; Üye değişkenleri (Data alanları) oluşturalım. Varsayılan yapıcıyı oluşturalım. get-set metotlarını oluşturalım. set metodumuzu beklenmeyen durumlar için istisna nesnesi fırlatacak şekilde düzenleyelim. İstisnamız kontrollü bir istisna olduğu için parametre alan yapıcıda try-catch bloğu oluşturalım. Try-cateh bloğu içerisinde beklenmeyen değeri ve istisnaya ait mesajı ekrana yazdıralım.
ÖRNEK-10
ÖRNEK-10
KayNAKlar Kim Korkar JAVA’dan-Temel Java, Alper AKALIN, Abaküs Yayınevi, Nisan 2015