Почему это исключение не может быть обработано? - PullRequest
0 голосов
/ 20 января 2019

Предположим, у меня есть это исключение:

class NoMoreCarrotsException extends Exception {}

Это проверенное исключение, поэтому оно должно быть обработано или объявлено.

Предположим, у меня есть этот метод:

private static void eatCarrot(){}
public void fails(){
   try{ 
      eatCarrot(); 
   }catch(NoMoreCarrotsException e){}
}

А вот этот:

public void works() throws NoMoreCarrotsException { 
    eatCarrot(); 
}

Почему работает второй, а не первый? Метод eatCarrot не вызывает исключение, так почему мы можем объявить / выбросить его?

1 Ответ

0 голосов
/ 20 января 2019

Вы можете объявить, что ваш метод (works() в этом случае) throws исключение, даже если он не выдает его.

Причина в том, что это позволило бы подклассам, переопределяющим ваш метод, генерировать это исключение (или любой подкласс этого исключения).

С другой стороны, в блоке try-catch, если вы попытаетесь перехватить исключение, которое не может быть сгенерировано блоком try, ваш блок catch станет мертвым кодом (т. Е. Кодом, который никогда не будет достигнут), и компилятором не позволяет этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...