Метод должен только throws
исключение, если он может дать разумные гарантии в отношении состояния объекта, любых параметров, передаваемых в метод, и любых других объектов, на которые действует метод.Например, метод, который должен извлекать из коллекции элемент, который, как ожидает вызывающий объект, содержится в нем, может throws
проверенное исключение, если элемент, который, как ожидается, существует в коллекции, не существует.Вызывающий объект, который перехватывает это исключение, должен ожидать, что коллекция не содержит рассматриваемый элемент.
Обратите внимание, что хотя Java и позволяет проверенным исключениям всплывать через метод, который объявлен как выбрасывающий исключения соответствующих типов,такое использование, как правило, следует рассматривать как анти-шаблон.Представьте, например, что некоторый метод LookAtSky()
объявлен как вызывающий FullMoonException
, и ожидается, что он бросит его, когда Луна заполнена;представьте далее, что LookAtSky()
вызывает ExamineJupiter()
, что также объявлено как throws FullMoonException
.Если FullMoonException
был сгенерирован ExamineJupiter()
, и если LookAtSky()
не перехватил его и не обработал или не обернул его в какой-то другой тип исключения, код, который вызывал LookAtSky
, предполагал бы, что исключение было результатомПолнолуние Земли;он не имеет ни малейшего представления о том, что виновником может быть одна из спутников Юпитера.
Исключения, которые может ожидать вызывающий объект (включая, по существу, все проверенные исключения), должны разрешаться только через метод, если исключение будетдля вызывающего метода означает то же самое, что и для вызываемого метода.Если код вызывает метод, который объявлен как выбрасывающий некоторое проверенное исключение, но вызывающий объект не ожидает, что он когда-либо вызовет это исключение на практике (например, потому что считает, что аргументы метода предварительно проверены), проверенное исключение должно быть перехвачено и упаковано.в некотором непроверенном типе исключения.Если вызывающая сторона не ожидает выдачи исключения, вызывающая сторона не может ожидать, что оно будет иметь какое-то особое значение.