Pure Java – 49 Handling Exception – 03

Merhaba Arkadaslar,
Bu yazimda da Java da exception mekanizmasina devam edecegim.

Exception Hiyerarsisi
Java ‘da pritimive turler disinda her sey obje olmalidir. Dolayisiyla Java’daki tum exceptionlar da objedir. Java’da tum exceptionlar java.lang.Exception sinifinin alt sinifidir.

hierarchy_of_java_exceptions

Resme dikkat edecek olursak Throwable sinifi iki ana kola ayriliyor ; Error ve Exception. Unchecked ve Checked exception kavramini ilerleyen yazilarda yazacagim.

Error’lar beklenmedik hata durumlarinda firlatilir.
Ornegin meshur;
java.lang.OutOfMemoryError: PermGen space

Genel olarak uygulamamiz Error durumlarini kurtarmak/duzeltmek gibi bir egilim gostermez. Bu nedenle Error’lari handle/yakalamamiz yonetmemiz gerekmez.

Error’lar hiyerarsi geregi Exception degildir. Bu detay aklimizda olsun.

Throwable sinifinin bize sagladigi printStackTrace metodunu catch icerisinde kullanabiliriz. Bu sayede try blogu icerisinde olusan hatanin(exception/error turu) bilgisini elde edebiliriz.

PrintStackTraceTest.java

package purejava49;

public class PrintStackTraceTest {
	public static void main(String[] args) {
		try {
			throw new ArrayIndexOutOfBoundsException();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			throw new OutOfMemoryError();
		} catch (Error e) {
			e.printStackTrace();
		}

		try {
			throw new RuntimeException();
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}
}

Eclipse’te , Console da ;

java.lang.ArrayIndexOutOfBoundsException
	at purejava49.PrintStackTraceTest.main(PrintStackTraceTest.java:6)
java.lang.OutOfMemoryError
	at purejava49.PrintStackTraceTest.main(PrintStackTraceTest.java:11)
java.lang.RuntimeException
	at purejava49.PrintStackTraceTest.main(PrintStackTraceTest.java:17)

tek bir catch ifadesinde birden fazla exception turu yakalayabiliriz.

catch(Exception e)

seklinde yazdigimda firlatilan tum exception turlerini yakalayabiliriz, fakat firlatilabilecek exceptionlari ozel olarak belirtmek isteyebiliriz. Bu durumda birden fazla catch ifadesi kullanabiliriz.

ExceptionMatching.java

package purejava49;

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

public class ExceptionMatching {

	public static void main(String args[]) {
		try {
			RandomAccessFile raf = new RandomAccessFile("myfile.txt", "r");
			byte b[] = new byte[1000];
			raf.readFully(b, 0, 1000);

		} catch (FileNotFoundException e) {
			System.err.println("File not found");
			System.err.println(e.getMessage());
			e.printStackTrace();
		} catch (IOException e) {
			System.err.println("IO Error");
			System.err.println(e.toString());
			e.printStackTrace();
		}
	}
}

Ornegimizi calistirdigimizda ,

File not found
myfile.txt (No such file or directory)
java.io.FileNotFoundException: myfile.txt (No such file or directory)
	at java.io.RandomAccessFile.open(Native Method)
	at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241)
	at java.io.RandomAccessFile.<init>(RandomAccessFile.java:122)
	at purejava49.ExceptionMatching.main(ExceptionMatching.java:11)

Burada dikkat etmemiz gereken nokta ; IOException , FileNotFoundException ‘in super sinifidir. catch mekanizmasinda once FileNotFoundException i yazmamiz gerekir.

public class FileNotFoundException extends IOException {
...
}

Daha genel olak exception turu yani super sinif daha asagidaki catch icerisinde yazilmalidir.

} catch (FileNotFoundException e) {
...
} catch (IOException e) { 
...
}

Yerine su sekilde yazarsak derleme hatasi aliriz.

} catch (IOException e) {
..
} catch (FileNotFoundException e) {
..
}


Yazimi burada sonlandiriyorum.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

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