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
Leave a Reply