Ответ
Ключевое слово throws используется в сигнатуре метода для объявления проверяемых исключений (checked exceptions), которые метод может выбросить, но не обрабатывает внутри себя.
Основные цели:
- Контракт с вызывающим кодом: Компилятор обязывает вызывающую сторону либо обработать объявленное исключение в
try-catch, либо также объявить его в своемthrows. Это обеспечивает безопасность и явное управление ошибками. - Декларация ответственности: Метод явно указывает, какие проблемные ситуации (кроме runtime-ошибок) он может спровоцировать.
Пример:
// Метод объявляет, что может выбросить IOException
public String readFile(String path) throws IOException {
// Код, который может вызвать FileNotFoundException (наследник IOException)
BufferedReader reader = new BufferedReader(new FileReader(path));
return reader.readLine();
}
// Вызывающий код ДОЛЖЕН либо обработать исключение...
public void processFile() {
try {
String data = readFile("file.txt");
} catch (IOException e) {
System.err.println("Не удалось прочитать файл: " + e.getMessage());
}
}
// ...либо объявить его дальше
public void processFile() throws IOException {
String data = readFile("file.txt");
}
Важно: throws используется только для checked exceptions (наследников Exception, но не RuntimeException). Непроверяемые исключения (RuntimeException и его наследники) объявлять в throws необязательно.