В Java существует два вида исключений: проверено и не проверено исключения.
Для проверенных исключений компилятор проверяет, обрабатывает ли их ваша программа, либо перехватывая их, либо указывая (с предложением throws
), что метод, в котором может возникнуть исключение, может вызывать метод такого рода .
Классы исключений, которые являются подклассами java.lang.RuntimeException
(и самого RuntimeException
), являются непроверенными исключениями. За этими исключениями компилятор не выполняет проверку - поэтому вам не нужно перехватывать их или указывать, что вы можете их выбросить.
Класс InterruptedException
является проверенным исключением, поэтому вы должны либо перехватить его, либо объявить, что ваш метод может его выбросить. Вы генерируете исключение из блока catch
, поэтому вы должны указать, что ваш метод может его выбросить:
public void invalid() throws InterruptedException {
// ...
Классы исключений, которые расширяют java.lang.Exception
(кроме RuntimeException
и подклассов), являются проверенными исключениями.
См. Учебник Java по исключениям для получения подробной информации.