Обработка исключений Java - PullRequest
2 голосов
/ 12 июля 2011

Я не могу вспомнить, как это работает.Если у меня есть метод, который выдает исключение, я могу разобраться с ним в методе или объявить, что метод выдает исключение.Что происходит, когда у меня есть метод внутри метода, который может выдать исключение, но явно не объявлено, что оно может?

Например:

public void A() throws Exception
{
  B();
}

public void B()
{
  //Some code in here may cause an exception.
}

Что происходит, когда метод "B"вызывает исключение?Программа вылетает?Должен ли "B" объявлять "выбрасывает исключение" в объявлении метода?

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Если метод B генерирует какое-то проверенное исключение, он должен объявить оператор throws исключения.

1 голос
/ 12 июля 2011

Все сводится к проверенному исключению против непроверенного исключения.

Не проверенные исключения являются подклассами из RuntimeException. Они могут быть выброшены без необходимости объявления в сигнатуре метода. Если они не пойманы, их бросают дальше в стек. Так что, если B выбрасывает неконтролируемое Исключение, A тоже его подбрасывает. Компилятор не будет проверять, обрабатываются ли непроверенные исключения, вы увидите это только во время выполнения, отсюда и название RuntimeException.

Проверенные исключения должны быть объявлены в сигнатуре и должны быть обработаны, либо в сигнатуре метода вызывающего метода должно быть указано, что исключение выдается. В противном случае компилятор будет жаловаться, и вы не сможете скомпилировать программу. Так что, если B генерирует CheckedException, например FileNotFoundException, вы должны объявить его в подписи B. Поскольку А не ловит его, его бросают дальше. Объявление A для выдачи исключения в этом случае работает, но это плохая практика.

0 голосов
/ 12 июля 2011

Если возникает исключение, оно будет перехвачено самым ближайшим блоком catch. Если перехватчик отсутствует в текущей функции, он будет всплывать, пока не найдет соответствующий блок перехвата.

Если вы явно объявите, что функция может выдать ошибку, и вызывающая сторона должна позаботиться об этой ситуации, тогда мы объявим throws с сигнатурой функции для typed exception.

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