کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Java – Exception propagation در Java

آموزش Java – Exception propagation در Java

در برنامه، هنگامی که خطایی رخ می دهد، آن خطا ابتدا در بالای stack صادر (throw) می شود و اگر مدیریت نشود، به متد قبلی پاس داده می شود و چنانچه آنجا هم مدیریت نشود، باز خطای مورد نظر به متد پایینی stack محول می شود. این روال ادامه می یابد تا اینکه یا خطا مدیریت شود و یا به انتهای stack برسد. از این رویداد تحت عنوان exception propagation یاد می شود.

نکته:

به صورت پیش فرض، خطاهای زمان اجرا (unchecked exception) از بالای stack به متدهای پایین تر stack ارسال می شود. خطاهای checked در زمان کامپایل رخ می دهند.

مثال کاربردی از Exception Propagation

class TestExceptionPropagation1{  
void m(){  
int data=50/0;  
}  
void n(){  
m();  
}  
void p(){  
try{  
n();  
}catch(Exception e){System.out.println("exception handled");}  
}  
public static void main(String args[]){  
TestExceptionPropagation1 obj=new TestExceptionPropagation1();  
obj.p();  
System.out.println("normal flow...");  
}  
}  

خروجی:

exception handled
normal flow...
آموزش Java

در مثال بالا خطا در بدنه ی متد m() رخ داده اما داخل این متد مدیریت نمی شود و در نتیجه به متد n() که در بخش پایین تر stack قرار دارد، ارسال می شود. خطای نام برده در بدنه ی این متد نیز اداره نمی شود و در نهایت به متد p() می رسد و در آنجا مدیریت می شود.

لازم به ذکر است که خطا در تمامی متدهای موجود در stack از جمله main()، p()، n() و m() می تواند مدیریت شود.

نکته:

خطاهای زمان کامپایل یا checked exception همان طور که از اسم آن پیدا است، در زمان ترجمه ی کد توسط کامپایلر صادر شده و اصلا به مرحله ی فوق نمی رسند (در زنجیره ی فراخوانی و stack نمی افتند).

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

class TestExceptionPropagation2{  
void m(){  
throw new java.io.IOException("device error");//checked exception  
}  
void n(){  
m();  
}  
void p(){  
try{  
n();  
}catch(Exception e){System.out.println("exception handeled");}  
}  
public static void main(String args[]){  
TestExceptionPropagation2 obj=new TestExceptionPropagation2();  
obj.p();  
System.out.println("normal flow");  
}  
}  

خروجی:

Compile Time Error
1396/07/28 4115 1656
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...