Я думаю, что исключение - это то, что вы должны делать, когда что-то идет не так. Таким образом, если ваше приложение не работает как отдельное приложение, вызывающая сторона может отреагировать на него и получить некоторую информацию о том, что пошло не так. Это также легче для целей отладки, потому что вы также получите лучшее представление о том, что пошло не так, когда вы увидите трассировку стека.
Следует отметить одну важную вещь: когда исключение достигает верхнего уровня и, следовательно, заставляет ВМ выйти из ВМ, возвращается код возврата 1, поэтому внешние приложения, использующие этот код возврата, видят, что что-то пошло не так.
Единственный случай, когда я думаю, что System.exit () имеет смысл, это когда ваше приложение предназначено для вызова приложениями, которые не являются Java, и поэтому должны использовать коды возврата, чтобы увидеть, работает ли ваше приложение или нет, и вам нужны приложения, чтобы иметь возможность по-разному реагировать на разные вещи, например, вам нужны разные коды возврата.