EXCEPTIONS DURUMLAR

Exceptions kelime anlamı olarak istisnalar anlamına gelmektedir. Kod yazarken istisnai durumlar oluşur. Mesela sayının sıfıra bölünmesi veya kullanıcının Integer veri girişi yapacağı esnada String tipinde bir değer girmesi gibi istisnai durumlar hatalar olabilir. Exceptions ise hataları ayıklamamız da, kod satırlarında nerede hata aldığımızı veya hangi durumlarda hata aldığımızı tespit etmemizde yardımcı oluyor. Bu konuda exceptions’ı nasıl kullanacağız hangi durumlarda kullanacağız onlara değineceğiz.

 

Hata Yakalama ( Try-Catch Blokları kullanımı )

Sıfıra bölme hatası üzerinden bir örnek program kodu yazalım.

ÖRNEK:

Yukarıdaki çıktı sonucuna göre aldığımız hata java.lang.ArithmeticException: / by zero ‘dur. İşte bu hataları yakalamak ve nerede hata yaptığımızı anlayabilmek için try-catch bloklarını kullanırız. İlk olarak try-catch bloklarını nasıl kullanıyoruz onu görelim.

ÖRNEK:

Şimdi sıfıra bölme hatasını try-catch blokları içerisinde yazalım ve kullanımını daha net anlayalım.

ÖRNEK:

Yukarıdaki catch bloğunda parantez içerisinde yer alan (Exception e) yerine (ArithmeticException e ) şeklinde de yazabilirdik. Ancak o şekilde yazmış olsaydık sadece aritmetik bir istisnai durum olup olmadığı aranacaktı. Yani hata mesajımız uyuşmayacak ve hatamızı bulamayacaktık. Eğer Exception ifadesini kullanırsak genel bir tarama yapacaktır ve hata uyuşmazlığı sıkıntısı yaşamamış olacağız. Düşünün hata ayıklarken bile hata yapabiliriz 😊 😊.

Şimdi dizilerle ilgili hata alabileceğimiz bir örnek üzerinde inceleme yapalım.

ÖRNEK:

Dizi adında bir dizi tanımladık ve bu dizinin boyutunu 3 elemanlı olarak belirledik. Ekrana ise dizimizin beşinci elemanını yazdırmak istedik. Ancak dizimiz sadece 3 elemanlı olduğundan dolayı Java, kodu çalıştırdığında bize java.lang.ArrayIndexOutOfBoundsException hatasını veriyor. Yani dizinin boyutunu aştın diyor bize. Bizde Java’yı kızdırmadan hatamızı nasıl düzeltiriz ona bakalım.

ÖRNEK:

Evet, örnekte görüldüğü üzere hatalı bir kod yazmış bulunuyoruz. Ancak try-catch blokları arasında yazdığımız için Java programımızı hemen hatalı bulmuyor ve hatayı bulana kadar programımızı çalıştırıyor. Try bloğundaki mantık işte budur. Kodlar yukarıdan aşağı doğru çalıştığı için yukarıdan aşağı doğru tarama yapar ve hata bulduğu an catch bloğu içerisine girer. Bu sefer catch bloğu devreye girer ve hatanın neyden kaynaklandığını bize bildirir.

Şimdi bir kasamız olsun ve gelir gider hesaplayalım. Kullanıcımız da para miktarı gireceği anda yanlışlıkla bir harf girmiş olsun para miktarının yanına. Bakalım Java bize bu sefer nasıl kızacak.

ÖRNEK:

Kod kısmında kullanıcının Integer değer girmesi isteniliyor ancak kullanıcı tutarı girerken yanlışlıkla klavyeden bir harf de giriliyor. Sonuç olarak Java bize birtakım hatalar veriyor. Şimdi try-catch içerisinde kodu çalıştırıp derleyelim.

ÖRNEK:

Çıktımıza göre java.util.InputMismatchException hatası almaktayız. Yani nerede hata yaptığımızı kolayca görebiliyoruz. Tabi bu kısa kod parçalarında ne gereği var diyebilirsiniz try-catch bloklarına ancak bir projede çalıştığınızı düşünün ve çok uzun satırlardan oluşan bir kod parçanız bulunuyor. Burada yaptığınız hataları bulmanız çok zor ve imkansıza yakın olacaktır. İşte try-catch burada devreye giriyor ve bizlere gerçekten yardımcı oluyor.

 

Finally bloğu

Finally bloğunda yukarıda hata olsa da olmasa da çalışacağı kodlar yer almalı demiştik. Bu kod kısmı için dosya işlemlerinde yer alan veri yazma ve okuma yapıldıktan sonra bu dosyaların kapatılması gerekmektedir. Finally bloğunda dosyamızı kapatmamız gereken kod yer alabilir.

Başka bir örnek ise veritabanı bağlantısı ile alakalı olabilir. Mesela veritabanı bağlantısı işlemleri  try bloğu içerisinde yapılır. Veritabanı bağlantısını kesme işlemini ise hata olsa da olmasa da yapmamız gerekeceğinden finally bloğu içerisinde yaparız. Henüz IO ( dosya işlemleri ) konusuna değinmediğim için bu konu üzerinden örnek vermeyeceğim şuan sadece ne işe yaradığını bilmemiz yeterli.

NOT: finally bloğu içerisinde try-catch blokları kullanılabilir.  Örneği inceleyiniz!

ÖRNEK:

 

THROWS ANAHTAR KELİMESİ

Java’da kod yazarken bazen geliştirici uygulamanın herhangi bir yerinde Exception vermek isteyebilir. Bunu throws anahtar kelimesi ile yapabiliyoruz. Sıfıra bölünme hatası örneğini inceleyim.

ÖRNEK:

Şuana kadar istisnai durumları main metodunda inceledik. Peki main metodu içerisinde değil de ayrı bir metot içerisinde hataları yakalasak ve sadece main metodun da hata metodumuzu çağırsak nasıl olurdu? Örneği inceleyelim.

ÖRNEK:

Şimdi throw üzerinden yapılan bir örneği inceleyelim.

ÖRNEK:

 

HATA TÜRLERİ

  • ArithmeticException:

0’a bölme gibi mantıksal matematik hatalarında oluşur.

  • ArrayIndexOutOfBoundsException:

Dizinin indeksinin aşılması durumunda oluşur. Diziye boyutundan fazla eleman yüklemek veya dizinin olmayan indeksine erişmek başlıca yapılan hatalardır.

  • NullPointerException:

Herhangi bir nesne değişkenine ilk değer atanmadan kullanılmaya çalışılırsa oluşur.

  • FileNotFoundException:

Oluşturulmamış bir dosyaya erişim durumunda bu hata meydana gelir.

  • IOException:

Karakteri okuyamamak gibi genel giriş/çıkış hataları

  • NumberFormatException:

Sayı girilmesi gereken yerde karakter girilmesi durumunda oluşur.

  • ArrayStoreException:

Diziye kendi türü dışında veri girilmesi durumunda oluşur.

  • ClassCastException:

Herhangi bir nesne değişkenine farklı tip değer girilmesi durumunda oluşur.

  • StringIndexOutOfBoundsException:

String’de var olmayan bir indekse erişilmeye çalışılması durumunda oluşur.

 

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.