Учебник Sun был ошибочно процитирован здесь в этой теме.
Примечание. Если JVM завершает работу во время выполнения кода try или catch, блок finally не будет выполняться. Аналогично, если поток, выполняющий код попытки или перехвата, прерван или прерван, блок finally не будет выполняться, даже если приложение в целом продолжит работу.
Если вы внимательно изучите учебник по солнцу для блока finally, в нем не будет «не выполнится», но «может не исполниться»
Вот правильное описание
Примечание. Если JVM завершает работу во время выполнения кода try или catch, блок finally может не выполняться. Аналогично, если поток, выполняющий код try или catch, прерывается или уничтожается, блок finally может не выполняться, даже если приложение в целом продолжается.
Очевидная причина такого поведения заключается в том, что вызов system.exit () обрабатывается в системном потоке времени выполнения, для завершения которого может потребоваться время, а планировщик потока может запросить, наконец, выполнить. Таким образом, finally предназначено для постоянного выполнения, но если вы закрываете jvm, может случиться, что jvm завершит работу, прежде чем наконец выполнится.