بلوک finally

گاهی اوقات می خواهید برخی کدها همیشه اجرا شوند خواه استثنا رخ دهد، خواه رخ ندهد، در این صورت از بلوک finally استفاده می شود. قبلا یاد گرفتیم که اگر در بلوک try یک استثناء رخ دهد همه کدهای موجود در این بلوک نادیده گرفته شده و برنامه به قسمت catch می رود. کدهای نادیده گرفته شده ممکن است در برنامه نقش حیاتی داشته باشند.

هدف بلوک finally هم حفظ نقش این کدها به صورت غیر مستقیم است. کدهایی را که فکر می کنید کدهای پایه ای هستند و برای اجرای برنامه لازم هستند را در داخل بلوک finally قرار دهید. برنامه زیر نحوه استفاده از این بلوک را نشان می دهد :

   1: package myfirstprogram;
   2: 
   3: public class MyFirstProgram 
   4: {
   5:     public static void main(String[] args) 
   6:     {        
   7:         int result;                                
   8:         int x = 5;                                 
   9:         int y = 0;                                 
  10: 
  11:         try                                        
  12:         {            
  13:             result = x / y; //ERROR                
  14:         }
  15:         catch(ArithmeticException error)              
  16:         {                                          
  17:             System.out.println(error.getMessage());
  18:         }
  19:         finally                                                
  20:         {                                                      
  21:             System.out.println("finally blocked was reached.");
  22:         }                                                      
  23:     }
  24: }
\ by zero.
finally blocked was reached.

بلوک finally بعد از بلوک catch نوشته می شود. اگر از چندین بلوک catch در برنامه استفاده می کنید بلوک finally باید بعد از همه آنها قرار گیرد. می توان از بلوک try و finally در صورتی که بلوک catch نداشته باشیم به صورت زیر استفاده کرد.

try
{
    //some code
}
finally
{
    //some code
}

از این بلوک معمولا برای بستن یک اتصال پایگاه داده یا بستن یک فایل استفاده می شود.