Kategori: Java , 16 Temmuz 2019 , JanFranco
Exception handling, istisna işleme olarak Türkçeye çevrilebilir. Hata yakalama anlamına gelir. Normal şartlarda programımızda bir hata yaptığımızda, program sonlanır ve konsolda bir hata mesajı görürüz. Ancak programlarımız sonlanmak zorunda değil. Çünkü hatalar her zaman bizden kaynaklı olmaz. Örneğin bir hesap makinesi yazdık. Kullanıcı bir sayıyı sıfıra böldü. Normal şartlarda program otomatik sonlanır. Ancak sonlanmaması gerek. Çünkü programı biz değil, kullanıcı kullanıyor. Bir hata mesajı çıkması ve programın sonlanmaması gerek. Bunu exception handling ile yapabiliriz:
Burada bir sayı sıfıra bölündü. Bu Exception sınıfından, ArithmeticException hatasıdır. Hatalı olabilecek kodu try bloğunun içine alırız. Hata durumunda çıkacak mesajı veya çalışacak kodu catch bloğunun içine yazarız. Burada ArithmeticException e şeklinde hatayı belirttik. Ancak belirtmek zorunda değildik. Exception e şeklinde yazsak da olurdu. Ancak spesifik olarak bir hatayı yakalamak istiyorsak o hatanın adını vermeliyiz. Bir try bloğunda birden fazla hata olabilir. Kodun çıktısı:try { System.out.println(30/0); } catch (ArithmeticException e) { System.out.println("Bir sayı sıfıra bölünemez."); } System.out.println("Burası çalışıyor 1");
Bir örnek daha yapalım:Bir sayı sıfıra bölünemez. Burası çalışıyor 1
Burada bir dizi tanımladık. Dizinin 5. elemanına erişmeye çalıştık. Ancak dizinin öyle bir elemanı yok. Bu ArrayIndexOutOfBound hatasıdır ve yukarıdaki şekilde kontrol edilir. Kodun çıktısı:try { int[] dizi = {1,2,3,4,5}; System.out.println(dizi[5]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Dizinin boyunu aştınız..."); } System.out.println("Burası çalışıyor 2");
Try, catch bloklarını anladık. Finally bloğu ise hata olsa da olmasa da her zaman çalışacak bloktur. Örneğin bir hata yakalamaya çalıştık. Hata arithmetic exception olsun ama biz array index out of bound hatası yakalamaya çalışalım. Bu durumda program sonlanacaktır. Çünkü hatayı yakalayamadık. Ancak sonlanmadan önce ilk olarak finally bloğu çalışacak:Dizinin boyunu aştınız... Burası çalışıyor 2
İlk olarak sıfıra bölmeye çalıştığımız için sıfıra bölme hatası verecektir. Konsolu görelim:try { int[] dizi = {1,2,3,4,5}; int a = 30 / 0; System.out.println(dizi[6]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Array'in boşunu aştınız."); } catch (ArithmeticException e) { System.out.println("Bir sayı sıfıra bölünemez."); } catch (Exception e) { System.out.println("Bir hata oluştu."); } finally { System.out.println("Finally bloğu çalışıyor..."); } System.out.println("Burası çalışıyor 3");
Son olarak finally bloğunun önemini görelim:Bir sayı sıfıra bölünemez. Finally bloğu çalışıyor... Burası çalışıyor 3
Burada bir sayı sıfıra bölündü. Ancak dizi hatası yakalamaya çalıştık. Konsolu görelim:try { int a = 30 / 0; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Dizinin boyunu aştınız..."); } finally { System.out.println("Finally çalışıyor..."); } System.out.println("Burası çalışıyor mu?");
Görüldüğü gibi program sonlandı. Ancak sonlanmadan önce finally bloğu çalıştı. Tüm kodlar:Finally çalışıyor... Exception in thread "main" java.lang.ArithmeticException: / by zero at Main_class.main(Main_class.java:45)
Tüm konsol:public class Main_class { public static void main(String[] args){ try { System.out.println(30/0); } catch (ArithmeticException e) { System.out.println("Bir sayı sıfıra bölünemez."); } System.out.println("Burası çalışıyor 1"); try { int[] dizi = {1,2,3,4,5}; System.out.println(dizi[5]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Dizinin boyunu aştınız..."); } System.out.println("Burası çalışıyor 2"); try { int[] dizi = {1,2,3,4,5}; int a = 30 / 0; System.out.println(dizi[6]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Array'in boşunu aştınız."); } catch (ArithmeticException e) { System.out.println("Bir sayı sıfıra bölünemez."); } catch (Exception e) { System.out.println("Bir hata oluştu."); } finally { System.out.println("Finally bloğu çalışıyor..."); } System.out.println("Burası çalışıyor 3"); try { int a = 30 / 0; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Dizinin boyunu aştınız..."); } finally { System.out.println("Finally çalışıyor..."); } System.out.println("Burası çalışıyor mu?"); } }
Bir sayı sıfıra bölünemez. Burası çalışıyor 1 Dizinin boyunu aştınız... Burası çalışıyor 2 Bir sayı sıfıra bölünemez. Finally bloğu çalışıyor... Burası çalışıyor 3 Finally çalışıyor... Exception in thread "main" java.lang.ArithmeticException: / by zero at Main_class.main(Main_class.java:45)