будет запускать любой код. Таким образом, предотвратить это невозможно, но если есть необходимость в предложении finally, включите его.
ичок в Java, и мне было интересно, если у меня есть следующий типичный код Java
public class MyApp {
public static void main(String[] args) {
try {
// do stuff
} catch {
// handle errors
} finally {
// clean up connections etc.
}
}
}
JVM гарантирует, что блок finally всегда будет запущен? Чтобы понять, откуда я пришел, я привык к программам на C / C ++, которые могут просто аварийно завершить работу, если вы разыменуете указатель NULL и у вас не будет кода для запуска после этого.
Но так как я понимаю Java и весь бизнес GC / управляемой памяти в целом, нет такой вещи, как разыменование нулевого указателя, все это ловкое ожидание, так что на самом деле у моей программы нет сбоя, который мог бы заставить ее окончательно пропустить или есть? Например, в Python я обычно делаю
try:
# do stuff
except AnExceptionIKnewMightHappen:
# react in an appropriate way
except:
# log that weird error I had not known could happen
и у меня никогда не было ни одного приложения, умирающего без прохождения моего кода.
Конечно, если ОС по какой-то причине убивает процесс (или если что-то убивает всю систему, например, отключение), Java мало что может сделать. Кроме того, из PHP я знаю неуловимые ошибки, от которых вы не можете защититься, даже если интерпретатор все еще был там после того, как это произошло (по крайней мере, он может вывести правильное сообщение).
Редактировать: Просто для ясности (это никто не понял неправильно), позвольте мне добавить, что я искал вещивнутри моего кода это может привести к тому, что наконец обойдут. Поэтому указание на System.exit было полезным напоминанием, хотя я не понимаю, почему я хотел бы сделать что-то подобное.
Выход из JVM - довольно очевидный путь, и я считаю это внешней причиной. Заметка, указывающая на то, что вы также должны помнить о возможности выхода потоков, пока JVM и приложение продолжают работать, была очень полезной, потому что, хотя мне это и сейчас кажется очевидным, я об этом не думал.