Pure Java – 50 Handling Exception – 04

Merhaba Arkadaslar,
Bu bolumde Java’nin handle or declare kuralini inceleyecegiz. Java’nin exception mekanizmasinda checked ve unchecked exception olmak uzere 2 tur exception mevcuttur. Onceki bolumde Exception ve Error kavraminin aslinda birbirinden farkli oldugunu ve bu siniflarin Throwable sinifini kalittigini gorduk. Runtime exception(calisma zamani)‘lar ve tum Error’lar(java.lang.Error sinifini kalitan tum error tipleri) unchecked exceptiondir.

Checked exceptionlar isin isine girdiginde bu durumda handle or declare kuralina uymamiz gerekmektedir.

MyException.java

import java.io.FileNotFoundException;
import java.io.IOException;

public class MyException {

	void giveMeException() throws IOException {
		try {
			throw new FileNotFoundException();
		} catch (FileNotFoundException e) {
			System.out.println("Exception catch");
		}
		throw new IOException();
	}

}

MyException sinifinda giveMeException adinda bir metot tanimladik.
FileNotFountException , IOException sinifinin bir alt sinifidir. IOExpception ve alt sinif tipindeki exception turlerinin hepsi checked exceptiondir. Dolayisiyla bu exception tiplerinin firlatilacagi durumlarda Java bizi bu hata uzerinde zorlar.
Yani ya bu tehlikeli hata kodunu try-catch blogu arasinda almaliyiz ya da metot taniminda throws anahtar kelimesini kullanarak bu riskli durumu(exception firlatilma ihtimalini) bildirmemiz gereklidir.

Iste burada oldugu gibi try-catch blogu arasina almaya handle ,throws anahtar kelimesini kullanarak metotta tanimlamaya declare denilir. Kuralimiz basit soz konusu checked exception ise ya handle ya declare !

Checked exception firlatan bir metodu cagirdigimizda handle-daclere kuralina uymak zorundayiz. Bu durumda bu kurala uygun sekilde ya throws anahtar kelimesini kullanmali ya da try-catch blogunda yakalamamiz gereklidir.

	
	void callExceptionMethod() {
		//checked exception firlatan bir metodu cagirdigimizda handle-daclere kuralina uymak zorundayiz.
		//burada derleme hatasi verecektir.
		//giveMeException();  
		
	}

Handle – Declare kurali unchecked exceptionlar icin zorunlu degildir !

MyException2.java

public class MyException2 {

	public static void main(String[] args) {
		giveMeUncheckedExpcetion3();
	}

	void giveMeUncheckedException() {
		throw new RuntimeException();
	}

	void giveMeUncheckedExpcetion2() {
		throw new ArithmeticException();
	}

	static void giveMeUncheckedExpcetion3() {
		// java.lang.ArithmeticException:
		int a = 5 / 0;
	}
}

ArithmeticException , RuntimeExpcetion sinifinin bir alt sinifidir. RuntimeException tipinde bir expception unchecked exceptiondir. Dolayiyisla bu kodlari try-catch blogu arasina almamiza ya da throws metoduyla metot taniminda yazmamiz icin Java bizi zorunlu tutmaz.

Hatirlayacagimiz gibi java.lang.Error ve alt sinifi tipinde tum errorlar unchecked exception’tir. Dolayisiyla handle – declare kuralina uymak zorunda degiliz.

MyError.java

public class MyError {

	void giveMeError() {
		throw new StackOverflowError();
	}

	void giveMeAnotherError() {
		throw new OutOfMemoryError();
	}

	void callErrors() {
		giveMeError();
		giveMeAnotherError();
	}
}

Son olarak catch blogunda yakaladigimiz bir exception’i tekrar firlatabiliriz;

Rethrow.java

public class Rethrow {

	void throwMeAgain() throws IOException {
		try {
			throw new IOException();
		} catch (IOException e) {
			throw e;
		}
	}
}

throwMeAgain metodunda yeni bir IOException exception’i firlattik ve yakaladik. Ayni exception’i catch blogunda tekrar firlatiyoruz. Dolayisiyla burada IOException , checked exception oldugu icin metodumuzda throws anahtar kelimesini kullanarak IOException’i declare etmemiz gereklidir.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *