Я знаю, что подобные вопросы есть повсюду, но я много читал об этом и до сих пор не могу понять, что делает команда "throws". Теперь я буду более конкретным:
Итак, один из примеров, который я видел, был Вот этот со следующим кодом:
public class CatchThrow {
private static void throwsMethod() throws NumberFormatException {
String intNumber = "5A";
Integer.parseInt(intNumber);
}
private static void catchMethod() {
try {
throwsMethod();
} catch (NumberFormatException e) {
System.out.println("Convertion Error");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
catchMethod();
}
}
Теперь, если я удалю исключение throws NumberFormatException из метода throwsMethod, программа будет работать так же и даст те же результаты. Фактически, все примеры с командой throws, которые я видел, делали то же самое, поэтому я не могу понять, зачем ее использовать.
Я использую Eclipse IDE версии 4.7.2.
Возможно, вы захотите взглянуть на этот ответ: stackoverflow.com/a/27763869/7123665
Возможный дубликат Различия между Runtime / Checked / Unchecked / Error / Exception
Да, это плохой пример. Есть два вида исключений: те, где вам нужен throws (отмеченные исключения), и те, где вам не нужен (непроверенные исключения). NumberFormatException - непроверенный.




Обычно ваша функция завершается в конце функции или оператора возврата.
Однако функция также может завершиться, когда достигнет оператора throw. Если исключение является подклассом Exception, вызывающая функция должна окружить вызов функции блоком try { } catch { }. Если исключение подкласса RuntimeException, вы можете по выбору заключить вызов функции в блок try catch.
Если вы посмотрите на JavaDoc для NumberFormatException: https://docs.oracle.com/javase/7/docs/api/java/lang/NumberFormatException.html увидит подклассы RuntimeException. Это означает, что ваш блок try-catch необязателен. Разница между этими двумя программами заключается в следующем: с блоком try-catch вы получите Convertion Error, напечатанный на консоли, без него вы увидите полную трассировку стека. Это часто называют «проглатыванием исключения».
Итак, в основном, если возникает исключение, и вы не хотите обрабатывать это исключение там, в этом случае вы используете ключевое слово 'throw', чтобы просто выбросить исключение, если оно возникает.
Пример: Здесь, в throwsMethod (), вы не заботитесь об обработке исключений, то есть не используете блоки try (), catch (), вы просто бросаете их, если возникает какое-либо исключение. И вы попадете в блок catch (), если в вашем throwsMethod () возникнет исключение.
Чтобы получить лучшее представление, вы должны прочитать отмеченные и неподтвержденные исключения в Java. Для проверенных исключений (происходящих во время компиляции) мы используем ключевое слово throw, а для Unchecked (время выполнения) мы используем try () catch ().
Пример: NumberFormatException - исключение Unchecked, IOException - исключение Checked.
Прочтите это для справки: https://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/
Вам нужно прочитать о различии между отмеченными и непроверенными исключениями в Java.