بخشی از پاورپوینت
اسلاید 1 :
مدیریت خطا و استثنا Exceptions
اسلاید 2 :
حقوق مؤلف
کلیه حقوق این اثر متعلق به انجمن جاواکاپ است
بازنشر یا تدریس آنچه توسط جاواکاپ و به صورت عمومی منتشر شده است، با ذکر مرجع (جاواکاپ) بلامانع است
اگر این اثر توسط جاواکاپ به صورت عمومی منتشر نشده است و به صورت اختصاصی در اختیار شما یا شرکت شما قرار گرفته، بازنشر آن مجاز نیست
تغییر محتوای این اثر بدون اطلاع و تأیید انجمن جاواکاپ مجاز نیست
اسلاید 3 :
سرفصل مطالب
ماهیت خطا و استثنا
چارچوب مدیریت استثناها
مزایای چارچوب مدیریت استثناها
مدیریت استثناها در جاوا
Exception Handling in Java
اسلاید 4 :
ماهیت خطا و استثنا
اسلاید 5 :
ایراد متد getYear چیست؟
public int getYear(String day){
String yearString = day.substring(0,4);
int year = Integer.parseInt(yearString);
return year;
}
String day = "2010/11/29";
int year = getYear(day);
برای حالتهای خاص، غیرعادی و غیرمعمول به درستی کار نمیکند:
پارامتر day ممکن است یک مقدار ناصحیح باشد
مثل “salam” که یک تاریخ نیست
پارامتر day در قالب موردنظر نباشد
مثل “29 Nov 2010”
پارامتر day ممکن است یک رشته خالی باشد (" ")
پارامتر day ممکن است null باشد
به این حالتهای خاص، استثنا (Exception) گفته میشود
اسلاید 6 :
مدیریت استثناها
با یک استثنا چه کنیم؟
مثلاً اگر پارامتر یک متد، مطابق انتظار ما نباشد
اجرای برنامه را قطع کنیم؟
تصور کنید یک ورودی اشتباه، باعث قطع کل برنامه شود!
متد در حال اجرا، خاتمه یابد و مقدار خاصی (مثلا 1-) را برگرداند
شاید مقدار خروجی نداشته باشد (void)
یا مقداری به عنوان خروجی «خاص» نتوانیم تعیین کنیم
خطا را در خروجی نمایش دهیم
کدام خروجی؟ شاید برنامه، مبتنی بر وب یا دارای واسط کاربری باشد
هیچ یک از این موارد، راه حل مناسبی نیستند
اسلاید 7 :
نکته مهم
گاهی در محل رخداد خطا نمیتوانیم به خطا رسیدگی کنیم
حالت غیرعادی را کشف میکنیم ولی قادر به پیادهسازی عکسالعمل مناسب نیستیم
مثال: یک متد کمکی و کتابخانهای را در نظر بگیرید
ممکن است در یک برنامه وب یا برنامه کنسول یا برنامه با واسط گرافیکی فراخوانی شود
بنابراین این متد نمیتواند بازخورد مناسبی هنگام مواجهه با پارامترهای اشتباه ایجاد کند
مثال: بازخورد مناسب در برنامه گرافیکی: پنجره خطا، در برنامه کنسول: چاپ خطا و .
در این موارد، هنگام برنامهنویسی، فقط بروز خطا را گزارش (پرتاب) میکنیم
بخش دیگری از برنامه گزارش خطا را دریافت میکند و عکسالعمل مناسبی اجرا میکند
اسلاید 8 :
مثال
متد getYear فقط میتوانست حالت غیرعادی (استثنا) را تشخیص دهد
بهتر است این متد بروز استثنا را به متدی که آن را فراخوانی کرده گزارش کند
و آن متد در این حالتهای خاص عکسالعمل مناسبی نشان دهد
مثلاً پیغام خطای مناسبی به کاربر نشان میدهد
دقت کنید:
متد getYear نمیداند در چه برنامه و با چه شرايطی فراخوانی شده
و در زمان خطا باید چه عکسالعملی نشان دهد
ولی متدی که getYear را فراخوانی کرده، احتمالاً میداند
اسلاید 9 :
استثنا (Exception) چیست؟
اسلاید 10 :
استثنا (Exception) چیست؟
خطا یا اتفاقی غیرعادی که در جریان اجرای برنامه رخ میدهد
روند اجرای طبیعی برنامه را مختل میکند
مثال:
ورودی نامعتبر
تقسیم به صفر
دسترسی به مقداری از آرایه که خارج محدوده است
خرابی هارددیسک
باز کردن فایلی که وجود ندارد
اسلاید 11 :
رفتار پیشفرض جاوا در زمان بروز استثنا
به صورت پیشفرض، اگر در زمان اجرا خطا یا استثنایی رخ دهد:
این استثنا توسط اجراگر جاوا (JVM) کشف میشود
توضیحاتی درباره این استثنا در خروجی چاپ میشود
اجرای برنامه قطع میشود و خاتمه مییابد
اما معمولاً این رفتار پیشفرض مناسب نیست
برنامهنویس باید عکسالعمل بهتری برای زمان بروز استثنا پیادهسازی کند
اسلاید 12 :
مثال
17public class DivByZero {
18public static void main(String a[]) {
19System.out.println(3/0);
20}
21}
Exception in thread "main" java.lang.ArithmeticException: / by zero
at DivByZero.main(DivByZero.java:19)
نکته: استثنا یک مفهوم در زمان اجراست
این کد هیچ خطایی در زمان کامپایل ندارد
اسلاید 13 :
مدیریت استثنا (Exception Handling)
برای مدیریت و کنترل خطاها و استثناها، چارچوبی وجود دارد
Exception Handling Framework
بسياری از زبانهای برنامهنویسی از این چارچوب کلی پشتیبانی میکنند
C++, Java, C#, …
این چارچوب، مدیریت استثناها را ساده میکند
بخش اصلی برنامه را از بخش مدیریت استثناها تفکیک میکند
به این ترتیب: برنامهنویسی و فهم برنامهها سادهتر میشود
اسلاید 14 :
چارچوب مدیریت استثنا Exception Handling Framework
اسلاید 15 :
مثالی از مدیریت استثنا در جاوا
public class ExceptionHandling {
public static void main(String[] args) {
try{
f();
g();
}catch(Exception e){
System.out.println(e.getMessage());
}
m();
}
private static void f() {.}
private static void g() { h(); }
private static void h() {.}
private static void m() {.}
}
بلوک try-catch
Exception Handler
اگر خطایی در بلوک try-catch (مثلاً در متد f یا g) رخ دهد، روال عادی اجرای برنامه قطع و بخش catch اجرا میشود
اسلاید 16 :
وقتی یک استثنا رخ میدهد، چه میشود؟
1- یک «شیء استثنا» ایجاد میشود (Exception Object)
2- شیء استثنا به اجراگر جاوا (JVM) تحویل داده میشود
به این عمل” پرتاب استثنا “ گفته میشود (Throwing an Exception)
شیء استثنا شامل اطلاعاتی مانند این موارد است:
پیغام خطا
اطلاعاتی درباره نوع خطا
شماره خطی از برنامه که استثنا در آن رخ داده است
اسلاید 17 :
وقتی یک استثنا رخ میدهد، چه میشود؟ (ادامه)
3- روند اجرای طبیعی برنامه متوقف میشود
4- اجراگر جاوا به دنبال مسؤول بررسی استثنا (بخش catch) میگردد
به این مسؤول، exception handler میگویند
پشته (stack) فراخوانی متدها را به ترتیب میگردد تا این بخش را پیدا کند
اگر چنین بخشی (exception handler) را پیدا کند:
شیء استثنا که پرتاب (throw) شده، توسط این بخش گرفته (catch) میشود
اجرای برنامه از این بخش ادامه مییابد (اجرای طبیعی متوقف شده)
از اطلاعات موجود در شیء استثنا برای مدیریت بهتر این حالت خاص استفاده میشود
اگر این بخش نباشد: «رفتار پیشفرض جاوا» در مقابله با استثنا اجرا میشود
(پیغام خطا در خروجی استاندارد چاپ میشود و اجرای برنامه خاتمه مییابد)
اسلاید 18 :
نحوه عملکرد چارچوب مدیریت استثنا
متد main
متدی دارای exception handler
متدی بدون exception handler
متدی که یک استثنا (exception) پرتاب میکند
فراخوانی متد
فراخوانی متد
فراخوانی متد
به دنبالexception handler میگردد
به دنبالexception handler میگردد
شیء استثنا را میگیرد و خطا را مدیریت میکند
اسلاید 19 :
مرور مجدد مثال:
public class ExceptionHandling {
public static void main(String[] args) {
try{
f();
g();
}catch(Exception e){
System.out.println(e.getMessage());
}
m();
}
private static void f() {.}
private static void g() { h(); }
private static void h() {.}
private static void m() {.}
}
اگر در اجرای f خطایی رخ دهد؟
اگر در اجرای h خطایی رخ دهد؟
اگر در اجرای m خطایی رخ دهد؟
اسلاید 20 :
چارچوب مدیریت استثنا در جاوا

