Понимание эффективных советов Java по документированию непроверенных исключений

Из эффективного Java "ДОКУМЕНТИРУЙТЕ ВСЕ ИСКЛЮЧЕНИЯ, ВЫБРАННЫЕ КАЖДЫМ МЕТОДОМ"

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

Я не понимаю, как прежний класс может распространять новые непроверенные исключения? Язык Java не обязывает вызывающую сторону перехватывать и распространять непроверенные исключения.


person Geek    schedule 20.07.2012    source источник


Ответы (3)


Он будет распространять его именно потому, что исключения либо перехватываются, либо распространяются. Если не поймано, распространяется исключение:

public void caller() {
    callee();
}

public void callee() {
    throw new RuntimeException();
}

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

person JB Nizet    schedule 20.07.2012

Что ж, если вы не перехватываете непроверенные исключения, они распространяются автоматически.

person Keppil    schedule 20.07.2012
comment
а те, о которых вы знаете, должны быть задокументированы. - person Thilo; 20.07.2012

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

Если вызываемый метод не обрабатывает Exception, то Exception будет распространяться на вызывающий метод. Если вызывающий метод не обрабатывает исключение, то исключение будет распространено на виртуальную машину Java, и вступит в силу обработчик исключений по умолчанию.

person ankit    schedule 20.07.2012