لطفا به کد زیر دقت نمایید.
public class shutDownHooksDemo { public static void main(String[] args) { for(int i=0;i<5;i++) { try { if(i==4) { System.out.println("Inside Try Block.Exiting without executing Finally block."); System.exit(0); } } finally { System.out.println("Inside Finally Block."); } } } }
ممکن است فکر کنید که خط println در داخل بلوک finally 5 بار اجرا خواهد شد. اما اگر برنامه را اجرا کنید خواهید دید که این خط 4 بار اجرا می شود. در وقتی که حلقه برای بار پنجم اجرا می شود خط System.exit فراخوانی می شود و بلوک finally دیگر اجرا نخواهد شد. زیرا متد exit باعث خارج شدن از برنامه خواهد شد. نحوه کار کردن متد exit به این شکل است که thread اجرا کننده برنامه را از اجرا باز می دارد در این صورت حتی بلوک finally که بعد از try آمده و باید اجرا شود نیز اجرا نمی شود. وقتی که متد System.exit فراخوانی می شود JVM یا ماشین مجازی جاوا قبل از این که اجرای برنامه را تمام کند پاکسازی های زیر را انجام می دهد.
public class shutDownHooksDemo { public static void main(String[] args) { for(int i=0;i<5;i++) { final int final_i = i; try { Runtime.getRuntime().addShutdownHook( new Thread() { public void run() { if(final_i==4) { System.out.println("Inside Try Block.Exiting without executing Finally block."); System.exit(0); } } } ); } finally{ System.out.println("Inside Finally Block."); } } } }
اگر کد بالا را اجرا کنیم. خواهیم دید که در همه حالت ها finally اجرا می شود و در قسمت آخر که System.exit فراخوانی می شود پیام داخل try چاپ خواهد شد .Itpro باشید
نویسنده: مهدی عادلی فر
منبع: انجمن تخصصی فناوری اطلاعات ایران
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.
بنیانگذار توسینسو و برنامه نویس
مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود