Bu yazımızda sizlerle Java’da Exception Handling (Hata Yakalama) ile ilgili örnekler ve kullanım alanlarını göreceğiz. Önceki yazımızda Java’da Exceptions (İstisnalar)‘ı öğrendik ve genel itibariyle bir anlatım yaptık. Peki nedir bu Java’da Exception Handling (Hata Yakalama) sorusuna gelince, genel itibariyle Exception Handling hata yakalama işlevini görmektedir. Yani biz programımızda bir hata ve istisna ile karşı karşıya kaldığımızda bu hatanın çözülmesi ve program akışının bozulmaması için bu kavramı kullanırız.
Java try-catch Kavramı
try-catch kavramı Java’da hataları, istisnaları ayıklamak için kullanılır. Genel kullanım yapısı şu şekildedir:
1 2 3 4 5 6 | try { } catch(Exception e) { } |
Bu yapıda, try gövdesinin içerisine istisna, hata oluşturabilecek kod bloğu yerleştirilir. Her try kavramından sonra catch komutu gelmektedir. Bir istisna veya hata meydana geldiğinde catch kavramı tarafında yakalanır.
1. Örnek
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { try { int [] a = {1,2,3,4,5,6,7,8,9}; System.out.println(a[10]); } catch(Exception e) { System.out.println("Hata var"); } } |
Ekran Çıktısı
1 | Hata var |
Bu örneğimizde bir dizi oluşturduk ve içerisine sayılar yerleştirdik. Ama dizi içerisinde tanımlanmayan ve olmayan bir elemanı çağırdığımız için bize hata vermesi gerekirdi. Görüldüğü üzere burada try-catch kavramımızı kullandık. Burada try-catch kavramını kullanmadan bir işlem yapsaydık ekran çıktısında direkt olarak (ArrayIndexOutOfBoundsException) hatasını alacaktık.
2. Örnek
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { try { int degisken = 55/0; System.out.println(degisken); } catch(Exception e) { System.out.println("Bir hata var"); } } |
Ekran Çıktısı
1 | Bir hata var |
Bu örneğimizde de 55 sayısını 0’a bölmeye çalıştığımız için bu kod satırımızda bir istisna oluşturacaktı. Karşı karşıya kalacağımız bu istisna (ArithmeticException) istisnası olacaktı. Bu istisnayı halletmek için try-catch kavramımızı kullandık.
Java finally Kavramı
Java’da finally kavramı, bir istisna meydana gelip gelmediğine bakılmaksızın, kod bloğunun her zaman yürütülmesini sağlamaktadır. Genel kullanım yapısı şu şekildedir:
1 2 3 4 5 6 7 8 9 10 11 | public static void main(String[] args) { try { } catch (Exception e) { } finally { } } |
Bir istisna meydana geldiğinde, finally kavramı, try-catch bloğundan sonra yürütülür. Bu finally bloğu niçin kullanılır sorusuna gelecek olursak. Genellikle dosyayı kapatmak, bağlantıyı kapatmak veya kod temizleme işlemleri için bu yöntem kullanılır. Bununla ilgili bir örnek yapalım.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 | public static void main(String[] args) { try { int a[] = {1,2,3,4,5,6,7,8,9 }; System.out.println(a[55]); } catch (Exception e) { System.out.println("Bir istisna var"); } finally { System.out.println("finally bloğu çalışıyor"); } } |
Ekran Çıktısı
1 2 | Bir istisna var finally bloğu çalışıyor |
Yaptığımız bu örnekte, dizi içerisinde bulunmayan bir elemanı çağırdığımız için, biz (ArrayIndexOutOfBoundsException) istisna sorunu karşımıza çıkacaktı. Örneğimizde yine try-catch bloğunu kullandık ve ilk olarak bu blok yürütüldü. Sonrasında ise finally kavramımızı kullanarak bir ekran çıktısı verdik.
Java throw ve throws Anahtar Kelimesi
Java’da throw anahtar kelimesi, bir istisnayı oluşturmak için kullanılır. Bunu şöyle düşünebiliriz, bir kişi işlem yapmak istesin, yapacağı bu işlemde istenilmeyen veya geçersiz bir durum ile işlem yaptığında, belirtilen bir istisnanın karşısına çıkmasını sağlayabiliriz yani kendi istisnalarımızı oluşturabiliriz. throw anahtar kelimesinin genel kullanım yapısı:
1 2 3 4 | public void metot() { throw new Birİstisna("exception"); } |
Birİstisna, olarak tanımladığımız bölgede istisna türü belirtiriz. Bununla ilgili bir örnek yapalım.
1. Örnek
1 2 3 4 5 6 7 8 | public class Throw { public static void metot() { throw new ArrayIndexOutOfBoundsException("Dizi içerisinde eleman bulunamıyor"); } public static void main(String[] args) { metot(); } } |
Ekran Çıktısı
1 2 3 | Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Dizi içerisinde eleman bulunamıyor at pkgthrow.Throw.metot(Throw.java:16) at pkgthrow.Throw.main(Throw.java:20) |
Yaptığımız bu örnekte throw anahtar kelimemizi kullanarak, ArrayIndexOutOfBoundsException istisnasını atadık.
Java’da throws anahtar kelimesi, oluşturulan metot içerisinde, meydana gelebilecek istisnaları belirtmek için kullanılır. Bununla ilgili bir örnek yapalım.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Throws { static void metot() throws ArithmeticException { System.out.println("Metot()"); throw new ArithmeticException("İslem"); } public static void main(String args[]) { try { metot(); } catch(ArithmeticException e) { System.out.println("İstisna durumu mevcut"); } } } |
Ekran Çıktısı
1 2 | Metot() İstisna durumu mevcut |
Yaptığımız bu örnekte, bir metot oluşturduk ve throws anahtar kelimemiz ile istisna durumu ekledik. Sonrasında ise bu istisna durumunu catch bölgesinde belirttik