Почему следующая инструкция Java успешно компилируется? - PullRequest
1 голос
/ 21 ноября 2011

Интересно, почему имеет смысл иметь пустой блок try, за которым следует перехват определенного исключения? Есть мысли?

try {

} catch (Exception e) {
    // do nothing
}

Ответы [ 3 ]

7 голосов
/ 21 ноября 2011

Идея состоит в том, что непроверенные исключения могут генерироваться любым кодом, поэтому, если вы ловите что-то, что может перехватить непроверенное исключение, компилятор не проверяет, является ли код в try Блок может бросить что угодно. В особом случае, когда в блоке try действительно есть код no , это неуместно, но это упрощает язык и является проблемой только в полностью поддельном коде, который я не ожидал бы увидеть в любой реальной кодовой базе. Я предполагаю, что есть подобные ситуации, когда вы делаете вещи только с примитивами и т. Д., Но это действительно крайний случай. Большинство блоков try будут содержать код, который теоретически может вызвать неконтролируемое исключение.

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

2 голосов
/ 21 ноября 2011

Не все, что компилируется, должно "иметь смысл", поскольку ваш код не содержит синтаксических и семантических ошибок, он будет компилироваться и, скорее всего, даже выполняться.

Основная идея заключается в том, что каждая часть вашего кодапотенциально может вызвать исключение.Блоки Try Catch не добавляют дополнительных издержек к вашему скомпилированному коду, и, следовательно, нет проблем с их использованием даже для любого кода.

2 голосов
/ 21 ноября 2011

исключения во время выполнения не проверяются по типу и могут быть непредсказуемо выданы

...