Причина, по которой он не рекомендуется, заключается в том, что в java обработка исключений, как правило, обходится дорого для обработки и восстановления. Когда генерируется исключение, он заставляет jvm вернуться назад к тому, что он делал, чтобы обеспечить трассировку стека, что никогда не сказывается на производительности. Короче говоря, это неправильное использование языка - обычно будет более чистый и эффективный способ обработки логики. Рассмотрим следующий код:
try {
int x = service.getValue();
if(x > 5)
throw new NumberTooBigException("Too Big");
else
throw new NumberTooSmallException("Too Small");
} catch (NumberTooBigException e) {
System.out.println("i think it's too big...");
} catch (NumberTooSmallException e) {
System.out.println("i think it's too small...");
}
Лучше всего использовать только логику управления, предусмотренную Java:
if(x > 5)
System.out.println("i think it's too big...");
else
System.out.println("i think it's too small...");
Как вы можете видеть из сравнения этих двух фрагментов, обработка исключений довольно нелепа - излишне то, что намеревается сделать образец. Лучший пример для примера, который вы разместили, будет выглядеть примерно так:
String[] args = {"one", "two", "three"};
for(String arg : args)
System.out.println(args);
}
Исключения лучше использовать, когда что-то идет не так, как IOException («на устройстве не осталось места»), ClassNotFoundException («не удается найти ваш код для запуска») или NoRouteToHostException («Не удается подключиться к хосту») ).