На этом шаге мы рассмотрим проброс проверяемых исключений
Метод может генерировать исключения, если возникает ситуация, с которой он не в состоянии справиться. Идея проста: метод не только сообщает компилятору, какие значения он не может возвращать, но и предсказывает, какие ошибки могут возникнуть. Например, в коде, вводящем данные из файла, можно предположить, что такого файла не существует или он пуст. Следовательно, данный метод должен сообщить компилятору, что он может сгенерировать исключение типа IOException.
Чтобы сказать какие исключения могут быть сгенерированы методом, нужно перечислить их в заголовке метода. Сделать это нужно с помощью ключевого слова throws. Например, сделать это можно следующим образом:
public test() throws IOException {...}
Это объявление означает, что данный метод может сгенерировать исключение, связанное с ошибками ввода-вывода.
Создавая свой собственный метод, не нужно объявлять все возможные исключения, которые этот метод фактически может сгенерировать. Исключения могут быть сгенерированы в следующих случаях:
В первых двух случаях нужно сообщить тем, кто будет пользоваться данным методом, что возможно исключение. Это делается потому что любой метод, генерирующий исключение, представляет собой потенциально опасное место в прикладной программы. Если своевременно не предусмотреть в ней обработку данного типа исключения, то выполнение текущего потока прервется.
Внутренние ошибки, то есть исключения, производные от класса Error, объявлять не нужно. Такие исключения могут генерироваться любыми методами, при этом они не поддаются никакому контролю.
Так же, совсем не обязательно объявлять unchecked исключения, производные от класса RuntimeException. Ответственность за подобные ошибки полностью возлагается на разработчика программы.
Отметим, что если в заголовке метода указано, что данный метод может генерировать какое-то исключение определенного класса, то он может сгенерировать любое исключение его подклассов.
Конечно, совсем не обязательно указывать все исключения которые может сгенерировать метод. Кроме этого в методе можно их перехватить (про перехват исключений мы поговорим позднее). Но если не указать все возможные проверяемые исключения или их не перехватить, то произойдет ошибка компиляции.
На следующем шаге мы поговорим о том, как генерировать исключения