استثناءات Java: استثناء MyException لم يتم إلقاؤه أبدًا في مجموعة عبارة المحاولة المقابلة
سؤال
أنا أفهم فكرة هذا الخطأ. لكنني أعتقد أنني لا أفهم كيف يعمل هذا في مكدس المكالمات.
ملف main.java:
public static void main(String[] args) {
try {
Function1();
} catch (myException e) {
System.out.println(e.getMessage());
}
}
public static void Function1() {
Function2();
}
Function2 موجود في ملف آخر:
file2.java
public void Function2() throws myException {
....
}
لذلك من خلال عدة مكالمات (أسفل مكدس الاتصال) لدي دالة 2 التي تحدد متطلبات "يلقي MyException". كيف تأتي الوظيفة الرئيسية (حيث يتم توجيه الخطأ) لا تدرك أنني أرمي MyException أسفل الخط؟
أي إرشادات في المكان الذي يكمن فيه "الفتحة" في "المعرفة الاستثناء الخاصة بي" سيكون موضع تقدير كبير.
aitee ،
المحلول
الثقب هو ذلك Function2
يعلن أنه يلقي الاستثناء ، ولكن Function1
لا. Java لا تحفر طريقها من خلال التسلسلات الهرمية المكالمة المحتملة ، ولكنها تمر مباشرة بما تعلن فيه throws
صياغات.
Function1
ابتعد عن عدم إعلان الرمي على الأرجح بسبب myException
هو RuntimeException
.
نصائح أخرى
مشكلتك هي ذلك Function1()
لا يعلن ذلك throws myException
- مما يعني أنه يجب أن يكون هناك أخطاء ترجمة: أحدهما حول الاستثناء الذي لم يتم القبض عليه أو إعلانه ، وواحد حول التقاط الاستثناء الذي لم يتم الإعلان عنه.