Java Puzzle 28 – Indecision

Merhaba Arkadaslar
Ornek kodumuzu inceleyelim ;

package _28.indecision;

public class Return {
	public static void main(String[] args) {
		System.out.println(decision());
	}

	static boolean decision() {
		try {
			return true;
		} finally {
			return false;
		}
	}
}

Kodu incelecek olursak decision metodunda , try blogu true finally blogu false donmektedir. Bu kod legal midir yani derleme hatasi verir mi ? Oncelikle kodumuz compile olacaktir, derleme hatasi vermez. Peki ciktimiz ne olacaktir ?
Ciktimiz false olacaktir ; bunun nedeni try blogu sonrasinda finally blogunun calismasidir.

Bir baska ornek olarak ;

package _28.indecision;

public class ThrowException {
	public static void main(String[] args) {
		System.out.println(decision());
	}

	@SuppressWarnings("finally")
	static boolean decision() {
		try {
			throw new Exception();
		} finally {
			return false;
		}
	}
}

try blogunda bir exception firlatiyoruz ,finally blogunda ise false degerini donmekteyiz.
Bu durumda ornegimizi calistirirsak ne olacak ? try blogunda bir hata meydana gelse bile finally blogu calisir ve geriye false doner. Herhangi bir hata da Console’da yer almaz.

false

Son olarak bir baska ornek daha inceleyelim;

package _28.indecision;

public class Exit {
	public static void main(String[] args) {
		System.out.println(decision());
	}

	@SuppressWarnings("finally")
	static boolean decision() {
		try {
			System.exit(0);
			System.out.println("After exit!");
		} finally {
			return false;
		}
	}
}

Ornegi calistirdigimizda ciktimiz ne olacaktir ? Bu ornegimizde bir cikti olmaz , burada System.exit metodu ile JVM i kapatiyoruz sonrasindaki System.out.println komutu calismayacaktir ve program devam etmedigi icin finally blogu da calismayacaktir.

finally blogu normal sekilde tamamlanmalidir , finally blogunda return , throw gibi kodlar yer almamalidir ve checked exceptionlar’in finally bloguna propagate edilmesine izin verilmemelidir.

Github kaynak kodlar / Source Code ;
leventerguder/injavawetrust-puzzler

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 *