مشخصات مقاله
-
1656
-
0.0
-
4115
-
0
-
0
آموزش 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...
در مثال بالا خطا در بدنه ی متد 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