"Желательно делать System.exit() только в логическом конце кода приложения. Здесь уместно выбросить исключение." - может, я что-то не так понимаю, но вроде как противоречие. Можете пояснить, в каком случае нужно выходить с System.exit(), а в каком бросать исключение?