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

و

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

آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3

با سلام به همه دوستان وهمراهان Itpro. در ادامه مباحث در مورد Exception ها در این مطلب نیز به ادامه آموزش نحوه مدیریت exception ها در جاوا خواهیم پرداخت.

بلوک finally

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

try
{
   //Protected code
}catch(ExceptionType1 e1)
{
   //Catch block
}catch(ExceptionType2 e2)
{
   //Catch block
}catch(ExceptionType3 e3)
{
   //Catch block
}finally
{
   //The finally block always executes.
}

برای مثالی از استفاده از این بلوک و درک بهتر آن به کد زیر توجه کنید :

public class ExcepTest{

   public static void main(String args[]){
      int a[] = new int[2];
      try{
         System.out.println("Access element three :" + a[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      finally{
         a[0] = 6;
         System.out.println("First element value: " +a[0]);
         System.out.println("The finally statement is executed");
      }
   }
}

خروجی برنامه بالا به شکل زیر خواهد بود:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

در مورد بلوک های try, catch , finally به نکات زیر توجه کنید:

  • بلوک catch هرگز بدون بلوک try نمی تواند باشد.
  • بلوک finally یک بلوک اختیاری است و گاهی اوقات لزومی ندارد که این بلوک نیز آورده شود.
  • بلوک try را نمی توان به تنهایی به کار برد و باید حداقل یک بلوک catch یا finally همراه آن باشد.
  • بین بلوک های try, catch, finally نمی توان هیچ کدی قرار داد.

بلوک try پیشرفته

معمولا وقتی از منابعی مانند استریم ها و یا کانکشن های استفاده می کنیم باید بعد از این که کارمان تمام شد آن را ببندیم. اگر از بلوک try استفاده کرده باشیم این کار را در داخل بلوک finally انجام می دهیم. برای مثال در برنامه زیر ما اطلاعات را از یک فایل توسط کلاس FileReader می خوانیم و سپس آن را در داخل بلوک finally می بندیم.

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class ReadData_Demo {

   public static void main(String args[]){
      FileReader fr=null;		
      try{
         File file=new File("file.txt");
         fr = new FileReader(file);  char [] a = new char[50];
         fr.read(a); // reads the content to the array
         for(char c : a)
         System.out.print(c); //prints the characters one by one
      }catch(IOException e){
          e.printStackTrace();
       }
       finally{	
          try{
              fr.close();
          }catch(IOException ex){		
               ex.printStackTrace();
           }
       }
    }

}

حال نسخه دیگری از try وجود دارد که ما را از بستن کانکشن ها و استریم ها در قسمت finally راحت می کند. این نوع try به صورت اتوماتیک منابع را مدیریت می کند. این نوع try در زمان جاوا نسخه 7 به جاوا اضافه شده است. این نوع try پس از این که بلوک try, catch به اتمام رسید منابع را آزاد می کند. نحوه استفاده از این امکان بسیار ساده است. برای این کار شما باید منابعی را که تعریف می کنید در یک پرانتز در جلوی try بیاورید. با این کار منبع معرفی شده در پایان بلوک های try, catch آزاد خواهد شد. نحوه نوشتن این نوع try به شکل زیر است:

try(FileReader fr=new FileReader("file path"))
   {
   //use the resource
   }catch(){
      //body of catch 
    }
   }

در مثال زیر مقادیری از یک فایل خوانده می شود و در انتها فایل آزاد می شود. به برنامه زیر دقت کنید:

import java.io.FileReader;
import java.io.IOException;

public class Try_withDemo {

   public static void main(String args[]){
      		
      try(FileReader fr=new FileReader("E://file.txt")){
         char [] a = new char[50];
         fr.read(a); // reads the contentto the array
         for(char c : a)
         System.out.print(c); //prints the characters one by one
      }catch(IOException e){
          e.printStackTrace();
       }   
   }
}

در استفاده از این نوع try باید نکاتی را در نظر داشت که در ادامه این نکات آورده شده است.

  • هر منبعی که در این نوع try مورد استفاده قرار می گیرد باید اینترفیس AutorClosable را پیاده سازی کرده باشد و متد close داشته باشد و بتوان این متد را به صورت اتوماتیک در زمان اجرا فراخوانی کرد.
  • شما می توانید هنگام تعریف منابع بیش از یک کلاس از منابع را نیز تعریف کرد.
  • اگر چندین کلاس از منابع را در اول try تعریف کرده باشید نحوه بسته شدن آنها به ترتیب از آخرین منبع به اولین منبع خواهد بود.
  • به جز معرفی منابع در بین پرانتز های این نوع try, catch تفاوتی با try, catch قبلی ندارد.
  • منبعی که در بین پرانتزها تعریف می شود به شکل ضمنی از نوع final است.

Exception های تعریف شده توسط کاربر.

در زبان جاوا می توان exception ی که خودمان تعریف کرده ایم را فعال کنیم. فقط برای تعریف یک کلاس exception باید به نکات زیر توجه کنید.

  • همه ی Exception ها باید فرزند Throwable باشند و از آن ارث برده باشند.
  • اگر می خواهید exception چک شده بسازید که در زمان کامپایل کاربر را مجبور به مدیریت exception کند باید کلاسی که می سازید فرزند کلاس Exception باشد.
  • اگر می خواهید که exception شما exception زمان اجرا باشد باید کلاس شما فرزند RuntimeException باشد.

نحوه تعریف کلاس به شکل زیر است:

class MyException extends Exception{
}

برای تعریف کلاس شما فقط لازم است که از کلاس از قبل تعریف شده Exception در کلاس خود ارث برده باشید. این exception ساخته شده یک exception چک شده خواهد بود. در مثال زیر یک exception به نام InsufficientFundsException تعریف کرده ایم که از کلاس Exception ارث برده است. دقت داشته باشید که کلاس Exception نیز مانند کلاس های دیگر می تواند متدها و فیلد های مختص به خود را داشته باشد.

import java.io.*;

public class InsufficientFundsException extends Exception
{
   private double amount;
   public InsufficientFundsException(double amount)
   {
      this.amount = amount;
   } 
   public double getAmount()
   {
      return amount;
   }
}

نحوه استفاده از exception تعریف شده توسط کاربر را در مثال زیر نشان داده ایم. دقت داشته باشید که متد withdraw() یک excetption از نوع InsufficientFundsException تولید خواهد کرد.

import java.io.*;

public class CheckingAccount
{
   private double balance;
   private int number;
   
   public CheckingAccount(int number)
   {
      this.number = number;
   }
   
   public void deposit(double amount)
   {
      balance += amount;
   }
   
   public void withdraw(double amount) throws InsufficientFundsException
   {
      if(amount <= balance)
      {
         balance -= amount;
      }
      else
      {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   
   public double getBalance()
   {
      return balance;
   }
   
   public int getNumber()
   {
      return number;
   }
}

برنامه زیر نحوه استفاده از متدهای deposite و withdraw را برای چک کردن حساب نشان می دهد.

public class BankDemo
{
   public static void main(String [] args)
   {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      c.deposit(500.00);
      
      try
      {
         System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600...");
         c.withdraw(600.00);
      }catch(InsufficientFundsException e)
      {
         System.out.println("Sorry, but you are short $" + e.getAmount());
         e.printStackTrace();
      }
    }
}

اگر کد های بالا را کامپایل کنیم خروجی به شکل زیر خواهد بود:

Depositing $500...

Withdrawing $100...

Withdrawing $600...
Sorry, but you are short $200.0
InsufficientFundsException
        at CheckingAccount.withdraw(CheckingAccount.java:25)
        at BankDemo.main(BankDemo.java:13)

Itpro باشید

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

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

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

#مدیریت_خطاها_در_کدنویسی #برنامه_نویسی_جاوا #آموزش_برنامه_نویسی_جاوا #انواع_exception_ها_در_جاوا #مدیریت_خطاها_در_جاوا #آموزش_جاوا #پردازش_استثناها_در_جاوا #دوره_آموزشی_جاوا #ساخت_exception_سفارشی_در_جاوا #استفاده_از_try_در_آزاد_کردن_منابع
عنوان
1 آموزش جاوا (Java) قسمت 1 : معرفی ، خصوصیات و شروع به کار رایگان
2 آموزش جاوا (Java) قسمت 2 : شی گرایی قسمت یک رایگان
3 آموزش جاوا (Java) قسمت 3: شی گرایی قسمت دو رایگان
4 آموزش جاوا (Java) قسمت 4 : شی گرایی قسمت سه رایگان
5 آموزش جاوا (Java) قسمت 5 : انواع داده رایگان
6 آموزش جاوا (Java) قسمت 6 : انواع متغیر رایگان
7 آموزش جاوا (Java) قسمت 7 : Modifier ها رایگان
8 آموزش جاوا (Java) قسمت 8 : عملگرها قسمت یک رایگان
9 آموزش جاوا (Java) قسمت 9 : عملگرها قسمت دو رایگان
10 آموزش جاوا (Java) قسمت 10 : حلقه های تکرار رایگان
11 آموزش جاوا (Java) قسمت 11 : عبارات شرطی رایگان
12 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
13 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
14 آموزش جاوا (Java) قسمت 14: کلاس Wrapper کاراکترها رایگان
15 آموزش جاوا (Java) قسمت 15 : کلاس String و کار با رشته قسمت یک رایگان
16 آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو رایگان
17 آموزش جاوا (Java) قسمت 17 : کلاس String و کار با رشته قسمت سه رایگان
18 آموزش جاوا (Java) قسمت 18 : کلاس String و کار با رشته قسمت چهار رایگان
19 آموزش جاوا (Java) قسمت 19 : StringBuilder و StringBuffer رایگان
20 آموزش جاوا (Java) قسمت 20 : استفاده از آرایه ها رایگان
21 آموزش جاوا (Java) قسمت 21 : آموزش کار با تاریخ رایگان
22 آموزش جاوا (Java) قسمت 22 : عبارات منظم (Regular Expression) رایگان
23 آموزش جاوا (Java) قسمت 23 : تعریف و استفاده از متدها قسمت یک رایگان
24 آموزش جاوا (Java) قسمت 24 : تعریف و استفاده از متدها قسمت دو رایگان
25 آموزش جاوا (Java) قسمت 25 : کار با استریم ها و فایل ها رایگان
26 آموزش جاوا (Java) قسمت 26 : کار با دایرکتوری ها رایگان
27 آموزش جاوا (Java) قسمت 27 : کلاس ByteArrayInputStream رایگان
28 آموزش جاوا (Java) قسمت 28 : معرفی کلاس File و متدها رایگان
29 آموزش جاوا (Java) قسمت 29 : معرفی و شرح Exception ها قسمت 1 رایگان
30 آموزش جاوا (Java) قسمت 30 : معرفی و شرح Exception ها قسمت 2 رایگان
31 آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3 رایگان
32 آموزش جاوا (Java) قسمت 32 : استفاده از انوع کلاس های داخلی رایگان
33 آموزش جاوا (Java) قسمت 33 : وراثت کلاس ها و انواع آن رایگان
34 آموزش جاوا (Java) قسمت 34 : Override کردن متد ها رایگان
35 آموزش جاوا (Java) قسمت 35 : چند ریختی (Polymorphism) رایگان
36 آموزش جاوا (Java) قسمت 36 : Enum و ویژگی های آن رایگان
37 آموزش جاوا (Java) قسمت 37 : معرفی Abstract رایگان
38 آموزش جاوا (Java) قسمت 38 : استفاده از کپسول بندی (Encapsulation) رایگان
39 آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها رایگان
40 آموزش جاوا (Java) قسمت 40 : پکیج(Package) و نحوه استفاده رایگان
41 آموزش جاوا (Java) قسمت 41 : معرفی داده ساختارها Enumeration رایگان
42 آموزش جاوا (Java) قسمت 42 : داده ساختار BitSet رایگان
43 آموزش جاوا (Java) قسمت 43 : داده ساختار Vector رایگان
44 آموزش جاوا (Java) قسمت 44 : داده ساختار Stack (پشته) رایگان
45 آموزش جاوا (Java) قسمت 45 : داده ساختار Dictionary رایگان
46 آموزش جاوا (Java) قسمت 46 : داده ساختار Hashtable رایگان
47 آموزش جاوا (Java) قسمت 47 : داده ساختار Properites رایگان
48 آموزش جاوا (Java) قسمت 48 : معرفی و آموزش جنریک (Generic) رایگان
49 آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1 رایگان
50 آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2 رایگان
51 آموزش جاوا (Java) قسمت 51 : استفاده از Lambda Expression رایگان
52 آموزش جاوا (Java) قسمت 52 : Thread و Multi-Threading رایگان
53 آموزش جاوا (Java) قسمت 53 : Runnable در Thread و Multi-Threading رایگان
54 آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها رایگان
زمان و قیمت کل 0″ 0
0 نظر

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

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

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