استثناءات Java: استثناء MyException لم يتم إلقاؤه أبدًا في مجموعة عبارة المحاولة المقابلة

StackOverflow https://stackoverflow.com/questions/4317643

سؤال

أنا أفهم فكرة هذا الخطأ. لكنني أعتقد أنني لا أفهم كيف يعمل هذا في مكدس المكالمات.

ملف 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 - مما يعني أنه يجب أن يكون هناك أخطاء ترجمة: أحدهما حول الاستثناء الذي لم يتم القبض عليه أو إعلانه ، وواحد حول التقاط الاستثناء الذي لم يتم الإعلان عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top