У меня есть следующий код в практике вопрос:Почему это исключение не вызывает ошибку времени выполнения?
public class Test {
static String s = "";
public static void m0(int a, int b) {
s += a;
m2();
m1(b);
}
public static void m1(int i) {
s += i;
}
public static void m2() {
throw new NullPointerException("aa");
}
public static void m() {
m0(1, 2);
m1(3);
}
public static void main(String args[]) {
try {
m();
} catch (Exception e) {
}
System.out.println(s);
}
}
В методе м2, когда NullPointerException брошено, почему он не завершает нить, как я ожидал? Я думал, что в том же методе не было блока catch try, это вызовет исключение и остановит программу.
Как я понял, он вернулся к ранее названному методу m0, когда я думал, что исключение, которое было исключено, остановило бы программу. Конечным результатом является то, что программа печатает 1, как значение s.
Все, что я прочитал до сих пор об исключениях, не объясняет эту логику, и я не могу ее самостоятельно обработать, поэтому я надеялся, что смогу получить помощь! Заранее спасибо.
сделал вас попробуйте отладки? – AdamSkywalker
Исключения составляют пузырь до тех пор, пока они не «поймают» или не сбрасывают верхнюю часть стека выполнения. это означает, что ваш 'catch' в' main() 'улавливает и НЕ НИЧЕГО, поскольку блок catch пуст. (например, 'System.out.println (« Эй, я что-то поймал »), и повторите попытку. –
@AdamSkywalker да, просто попробовал, у него нет проблем с компиляцией или запуском, он просто печатает 1 – Sam