Exception Handling, Try, Catch, Finally

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:


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");
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ı:

Bir sayı sıfıra bölünemez.
Burası çalışıyor 1
Bir örnek daha yapalım:

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");
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ı:

Dizinin boyunu aştınız...
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:

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");
İlk olarak sıfıra bölmeye çalıştığımız için sıfıra bölme hatası verecektir. Konsolu görelim:

Bir sayı sıfıra bölünemez.
Finally bloğu çalışıyor...
Burası çalışıyor 3
Son olarak finally bloğunun önemini 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?");
Burada bir sayı sıfıra bölündü. Ancak dizi hatası yakalamaya çalıştık. Konsolu görelim:

Finally çalışıyor...
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at Main_class.main(Main_class.java:45)
Görüldüğü gibi program sonlandı. Ancak sonlanmadan önce finally bloğu çalıştı. Tüm kodlar:

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?");
		
	}
	
}
Tüm konsol:

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)


Sonraki Yazı: Exception Handling, Throw, Throws
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın