Это красота многопоточности !!
Каждая Java-программа, которую вы пишете, имеет запущенный поток, который обычно является основным потоком. В вашем случае вы создали свой собственный поток, родительский поток которого является основным потоком. Когда ваш дочерний поток генерирует исключение, он завершается, но основной поток все еще не завершен. Так что печатается это последнее утверждение, а затем заканчивается.
В случае потоков поведение не может быть предсказано [так как это зависит от политики JVM для выбора элементов из пула работоспособности], поэтому порядок, который вы видите, может отличаться в разных прогонах.