Обработка исключений Java - пользовательское исключение

У меня есть специальное исключение, подобное этому

public class MyOwnException extends Exception {

}

Тогда в моем классе

У меня есть два метода

public void ExceptionTest() throws Exception {
  throw new FileNotFoundException();
}


public void ApplicationExceptionTest() throws MyOwnException {
  throw new FileNotFoundException();
}

Eclipse жалуется на второй метод "Необработанный тип исключения FileNotFoundException". Я думал, поскольку MyOwnException расширяет Exception, он не должен жаловаться...

Может ли кто-нибудь сказать мне, что мне здесь не хватает?

Ответ 1

Дерево расширений

  • Исключение
    • IOException
      • FileNotFoundException
    • MyOwnException

FileNotFound и MyOwn не знали друг друга.

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
}

- это путь

Комментарий:

Я надеюсь, что это только для тестирования макета, а не для реализации класса, который вы wnt используете в своем обычном исходном коде!

Ответ 2

Ваш метод объявляет, что он выбрасывает MyOwnException, но FileNotFoundException не является MyOwnException. Просто потому, что оба подкласса Exception в конечном итоге не означают, что они связаны друг с другом.

Вы можете бросить только проверенное исключение, если этот класс исключений или суперкласс явно указан в предложении throws. MyOwnException не является суперклассом FileNotFoundException.

Зачем вы хотите это сделать?

Ответ 3

Вы говорите, что ApplicationExceptionTest выбрасывает MyOwnException. Хотя MyOwnException расширяет Exception, это не имеет значения здесь, потому что FileNotFoundException не расширяет MyOwnException.

Если это упростит, попробуйте заменить Exception на "Shape", FileNotFoundException с "Square" и MyOwnException с помощью "Circle". Итак, вы говорите, что бросаете круг, но вы на самом деле бросаете квадрат. Не имеет значения, что оба являются фигурами.

(В стороне, ваше соглашение об именах очень нетипично для Java. В Java методы обычно начинаются с строчной буквы.)

Ответ 4

Проверенные исключения в Java обычно представляют собой плохую идею, поскольку слишком часто это приводит к "спагетти исключения". Большинство современных фреймворков не используют проверенное исключение - на самом деле, большинство из них переносят существующие проверенные исключения из предыдущих версий с непроверенными.