معالجة الاستثناءات في عبارات الصيد والأخيرة
عند التعامل مع معالجة الاستثناءات في Java، من الضروري فهم التفاعل بين عبارات الصيد والأخيرة . خذ بعين الاعتبار المثال التالي المقدم لمهمة جامعية:
class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
public class C1 {
public static void main(String[] args) throws Exception {
try {
System.out.print(1);
q();
}
catch (Exception i) {
throw new MyExc2();
}
finally {
System.out.print(2);
throw new MyExc1();
}
}
static void q() throws Exception {
try {
throw new MyExc1();
}
catch (Exception y) {
}
finally {
System.out.print(3);
throw new Exception();
}
}
}
السؤال المطروح لمخرجات هذا الكود. في حين أن البعض قد أجاب على "13Exception في مؤشر الترابط الرئيسي MyExc2،" الإجابة الصحيحة هي "132Exception في مؤشر الترابط الرئيسي MyExc1."
لماذا يختفي MyExc2
مفتاح الفهم يكمن الإخراج الصحيح في سلوك عبارات الصيد والأخيرة. عندما يتم طرح استثناء ضمن عملية التقاط أو حظر أخيرًا، فإن ذلك يكون له آثار كبيرة على التدفق. فيما يلي تفصيل:
الاستثناء في الكتلة النهائية: وبالمثل، إذا تم طرح استثناء جديد في كتلة أخيرًا، يتم أيضًا إحباط الاستثناء الأصلي. ومع ذلك، هناك نقطة مهمة يجب ملاحظتها:
من خلال تتبع التنفيذ بناءً على هذه المبادئ، يمكننا أن نرى ما يلي:
تطبع كتلة المحاولة في الصفحة الرئيسية "1" وتستدعي q().تم طرح MyExc2 في هذه الكتلة، مما أدى إلى إحباط MyExc1 الأصلي.
يتم طرح MyExc1 في هذه الكتلة، مما يؤدي إلى إحباط MyExc2.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3