شما می توانید با عضویت در انجمن پرسش و پاسخ درسمن هرگونه سوالی دارید را مطرح کنید

آموش exception ها در جاوا

تاریخ بروزرسانی : یکشنبه 24 شهریور 1398

تعداد بازدید : 265

گروه دوره : Java

زمان خواندن مقاله : 10 دقیقه

اگر میخواهید نحوه مدیریت خطاها در جاوا را بدانید این مطلب را مطالعه کنید.

آموش exception ها در جاوا

توضیح exception در جاوا

با سلام خدمت همراهان و دوستداران آکامی آنلاین درسمن.
گاهی مواقع این اتفاق برایتان میفتد، زمانی که دارید برنامه نویسی میکنید قطعه کد شما اجرا نشود و با خطا روبه رو شوید که این خطاها ممکن است شمارا کلافه کند و ندانید که اشکال کار کجاست؟
ولی باید بگویم اصلا ناراحت نباشید چون برنامه نویسی یعنی خطا کردن و تلاش برای پیدا کردن راهی مناسب برای رسیدن به جواب.
این خطاهایی که کمی کلافه کننده و حوصله سربر هستند اکسپشن نام دارد که اگر آنها را بشناسید، نحوه رفع این خطاها برایتان آسان تر میشود.
ما دراین مقاله قصد داریم تا شما را با آموزش exception در جاوا آشنا کنیم.

اکسپشن چیست؟

بهتر است قبل از هر چیز شما را با واژه اکسپشن آشنا کنم در واقع اکسپشن یک مشکل است که در طول اجرای یک برنامه رخ میدهد و جریان طبیعی برنامه را متوقف میکند و برنامه به طور خودکار پایان می یابد.
همه ی کلاس های Exception ها از کلاس java.lang.Exception ارث بری میکنند.
در ادامه به چگونگی کار با اکسپشن و همچنین مدیریت آنها خواهیم پرداخت.

دلایل رخداد exception  ها:
 

  1. کاربر یک داده نامعتبر وارد کرده است.
  2. یک فایل که نیاز به باز شدن دارد پیدا نشود.
  3. اتصال شبکه در وسط ارتباط گم شده است یا JVM از حافظه خارج شده است.

 

انواع خطاها:


با دلایل رخداد یک اکسپشن آشنا شدیم پس میتوان به طور کلی خطاها را به دو دسته : خطاهای زمان کامپایل و خطاهای زمان اجرا تقسیم کرد که در ادامه به توضیح آنها خواهیم پراخت.
خطای زمان کامپایل (Compile-Time Error)
احتمالا در روند یادگیری جاوا با این خطا بارها مواجه شدید. این خطا در اثر درست ‌ننوشتن کدهای برنامه رخ می‌دهد. مثلا اگر در پایان دستورها علامت ; را قرار ندهید این یک خطای زمان کامپایل محسوب می‌شود.
چون این نوع خطاها هنگام کامپایل برنامه و قبل از اجرای آن تشخیص داده می‌َشوند به آن‌ها خطای زمان کامپایل گفته می‌شود. تمام ideهای جاوا که امروزه وجود دارند خطای زمان کامپایل را در همان لحظه که رخ می‌دهد به برنامه‌نویس اطلاع می‌دهند. به عنوان مثال در ایکلیپس خطاهای زمان کامپایل با خط قرمزی که زیر کد کشیده می‌شود مشخص می‌شوند.
نکته: به خطاهای زمان کامپایل خطای سینتکس یا خطای نحوی (Syntax Error) نیز گفته می‌شود.

خطای زمان اجرا (Runtime Error)
تشخیص خطاهای زمان اجرا دشوارتر از تشخیص خطاهای نحوی است. این نوع خطاها تا قبل از اجرای برنامه و رسیدن به کدی که باعث بروز خطا می‌شود قابل تشخیص نیستند و به همین دلیل به آن خطای زمان اجرا گفته می‌شود ، یعنی این نوع خطاها در طول اجرای برنامه رخ می‌دهند.
به کد زیر دقت کنید:
int[] nums = {1, 2, 3};

System.out.println(nums[3]);
این کد در ظاهر هیچ مشکلی ندارد و هیچ خطای دستوری هم در آن وجود ندارد اما در دستور چاپ سعی شده تا با عنصری از آرایه nums با شماره اندیس ۳ دسترسی پیدا شود و همانطور که مشخص است اندیس آخرین عنصر این آرایه ۲ است و عنصری با اندیس ۳ وجود ندارد.
به دلیل اینکه اندازه آرایه ‌ها هنگام کامپایل مشخص نیست (چون ممکن است اندازه یک آرایه توسط کاربر به عنوان ورودی به برنامه تعیین شود) پس کامپایلر این مشکل را نمی‌فهمد و خطای زمان کامپایل رخ نمی‌دهد بلکه هنگام اجرای برنامه وقتی برنامه به این کد رسید یک خطای زمان اجرا رخ می‌دهد. اگر کد بالا را اجرا کنید برنامه متوقف شده و خطایی تحت عنوان  ArrayIndexOutOfBoundsException  رخ می‌دهد.

چگونگی رفع اکسپشن در برنامه:

بعد از تشخیص انواع خطاها نوبت آن است که بدانیم  چگونه آنها را مدیریت کنیم یعنی برای این که بتوانیم  هنگام وقوع یک exception، آن را تشخیص داده و عمل خاصی را انجام دهیم از کلمات کلیدی try, catch استفاده می کنیم. Try, catch اسم بلوک های کد است که برای مدیریت exception ها به کار می رود. کدهایی را که ممکن است exception تولید کنند را داخل بلوک try قرار می دهیم و عمل مربوط به هرکدام از exception ها را داخل بلوک های catch می نویسیم.
درواقع در قسمت try میگوییم یا همه خطوط اجرا شود و یا هیچ کدام ازخطوط اجرا نشود.
نحوه نوشتن و استفاده از این بلوک ها در برنامه جاوا به شکل زیر خواهد بود:

Try

{

   //Protected code

}catch(ExceptionName e1)

{

   //Catch block

}
به کدی که داخل بلوک try قرار می گیرد کد محافظت شده می گویند. دقت داشته باشید که بلوک های catch  باید بلافاصله بعد از بلوک try قرار بگیرند. بعد از هر بلوک try هم باید بلوک های catch ویا بلوک finally  بیاید. بلوک های catch برای درگیر شدن با exception ها به کار می روند. اصولا هر بلوک catch برای مدیریت یک Exception به کار می رود. وقتی که در داخل کدهای بلوک try خطایی رخ دهد بلوک catch  مربوط به آن بلوک اجرا خواهد شد.
برای مثال ما یک آرایه با دو عنصر تعریف شده داریم و کد برنامه سعی میکند که به عنصر 3 دستسرسی پیدا کند که ما آن را به صورت قطعه کد زیر مدیریت میکنیم:
// File Name : ExcepTest.java

import java.io.*;

public class ExcepTest {

   public static void main(String args[]) {

      try {

         int a[] = new int[2];

         System.out.println("Access element three :" + a[3]);

      } catch (ArrayIndexOutOfBoundsException e) {

         System.out.println("Exception thrown  :" + e);

      }

      System.out.println("Out of the block");

   }

   }
اکنون نتیجه اجرای کد به صورت زیر است:
Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3

Out of the block

نکته: یک بلوک try میتواند چندین بلوک catch داشته باشد که نحوه نوشتاری آن به صورت زیر است:
try

{

   //Protected code

}catch(ExceptionType1 e1)

{

   //Catch block

}catch(ExceptionType2 e2)

{

   //Catch block

}catch(ExceptionType3 e3)

{

   //Catch block

}
از جاوا هفت به بعد برای استفاده از بلوک های catch چندگانه میتوان از قطعه کد ساده زیر استفاده کنید:
catch (IOException|FileNotFoundException ex) {
   logger.log(ex);
   throw ex;
}
توضیح کلمه های throws و throw:
در برخی مواقع اگر یک متد حاوی کدی باشد که باعث بروز یک استثنا شود ،آنگاه یا در همان متد باید آن استثنا را مدیریت کنیم و یا باید با کلمه throws استثناهایی را که ممکن است در آن متد رخ دهد را مشخص کنیم.  اما کاربرد کلمه کلیدی throw به طور کامل با throwsتفاوت دارد.  به عبارت دیگر کلمه کلیدی throws  برای این است که نوشتن try, catch را به عقب بیندازیم ولی کلمه throw  برای ساختن یک exception به طور دستی است.
بلاک :finally
این بلاک در ساختار try/catch بعد از تمام بلوک های catch قرار میگرد و استفاده از آن اختیاری است این دستور، زمانی که هیچکدام از دستورات داخل catch اجرا نشود، اجرا خواهد شد.
نحوه نوشتن آن به صورت زیر است:
try {
   // Protected code
} catch (ExceptionType1 e1) {
   // Catch block
} catch (ExceptionType2 e2) {
   // Catch block
} catch (ExceptionType3 e3) {
   // Catch block
}finally {
   // The finally block always executes.
}
نکات زیر را به خاطر بسپارید:
  • یک عبارت catch نمی تواند بدون دستورات وجود داشته باشد.
  • هرگاه یک بلوک try/catch وجود داشته باشد، finally در آن اجباری نیست.
ساختن exception  در جاوا:
برای ساخت یک کلاس اکسپشن باید به موارد زیر توجه کنید:
  • همه ی Exception ها باید فرزند Throwable باشند و از آن ارث برده باشند.
  • اگر می خواهید exception  کامپایل بسازید که  کاربر را مجبور به مدیریت exception کند باید کلاسی که می سازید فرزند کلاس Exception باشد.
  • اگر می خواهید که exception شما exception زمان اجرا باشد باید کلاس شما فرزند RuntimeException باشد.
نحوه تعریف کلاس به شکل زیر است:
class MyException extends Exception{
}
برای تعریف کلاس شما فقط لازم است که از کلاس از قبل تعریف شده Exception در کلاس خود ارث برده باشید.
کلام آخر:
شما عزیزان میتوانید برای درک بهتر مطلب از دوره ی آموزش جاوا در سایت ما که به صورت رایگان و با کیفیت تهیه شده است استفاده کنید.


اشتراک گذاری


توضیحاتی در مورد نویسنده این مقاله :
مرضیه فتاحی مرضیه فتاحی

کارشناس کامپیوتر گرایش نرم افزار..... نویسندگی،تجربه ای انفرادی است یعنی به اشتراک گذاری.... این بخشی از ذات انسان است که بخواهد مسائل را به اشتراک بگذارد ازجمله:افکار،ایده ها،عقاید


نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد .
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

گروه مقالات


آموزشی
21
علمی
21
تحقیقاتی
29


به دنبال هر آموزشی هستید در اینجا به دنبال آن باشید .