Javac-компилятор действительно мало оптимизирует.Но простое обнаружение и оптимизация мертвого кода пока возможны.
В вашем примере: компилятор может легко обнаружить, что блок try пуст.Пустые блоки try не могут сгенерировать, поэтому весь код блока catch по существу dead .
Таким образом, компилятор может войти и просто отбросить всю попытку / поймать здесь.Тогда не осталось ничего, что могло бы вызвать исключение.
Что, когда мы используем javap, это именно то, что мы находим в байт-коде:
void methodThrowsException();
Code:
0: return
И да, другой ответ является полностью правильным: это работает только потому, что вы используете Exception
, более конкретный (проверенный) подкласс приведет к ошибке компилятора.