در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

هنگامی که در جاوا try اجرا می شود ولی finally خیر

با سلام به همه دوستان و همراهان Itpro. لطفا به کد زیر دقت نمایید.

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 یا ماشین مجازی جاوا قبل از این که اجرای برنامه را تمام کند پاکسازی های زیر را انجام می دهد.

  • اول این که همه ی shutdown hook هایی را که در Runtime.addShutDownHook ثبت شده اند را اجرا می کند. این کار همه ی منابع گرفته شده توسط برنامه را آزاد می کند.
  • پاکسازی دومی مربوط به finalizer ها است. Finalizer مورد نظر یا System.runFinalizersOnExit است و یا Runtime.runFinalizersOnExit می باشد. استفاده از finalizerها مدتی است که منسوخ شده است. وظیفه finalizer است است که اگر شیئی توسط دیگر اشیا دستکاری شده است و این شی از بین نرفته است را طوری مدیریت کند که سیستم دچار بن بست یا Dead lock نشود. به مثال زیر توجه کنید.
  • 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 باشید

نویسنده: مهدی عادلی فر

منبع: انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#برنامه_نویسی_جاوا #آموزش_جاوا #نکات_برنامه_نویسی_جاوا #system.exit_در_جاوا #try/catch_در_جاوا #زبان_برنامه_نویسی_جاوا
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....