tryпочти не имеет расходов вообще. Вместо того, чтобы выполнять настройку tryво время выполнения, метаданные кода структурированы во время компиляции, так что, когда выдается исключение, он теперь выполняет относительно дорогую операцию обхода стека и проверки, существуют ли какие-либо tryблоки, которые бы перехватили это. исключение. С точки зрения непрофессионала, он также tryможет быть бесплатным. На самом деле это исключение, которое стоит вам - но если вы не выбросите сотни или тысячи исключений, вы все равно не заметите цену.
tryимеет некоторые незначительные расходы, связанные с этим. Java не может оптимизировать код в tryблоке, как в противном случае. Например, Java часто будет переставлять инструкции в методе, чтобы он работал быстрее, но Java также должна гарантировать, что, если выдается исключение, выполнение метода наблюдается так, как если бы его операторы, как написано в исходном коде, выполнялись по порядку до какой-то строки.
Потому что в tryблоке может быть сгенерировано исключение (в любой строке блока try! Некоторые исключения генерируются асинхронно, например, путем вызова stopпотока (что устарело), и даже, кроме того, что OutOfMemoryError может произойти почти где угодно), и все же это может быть перехвачен, и код продолжит выполнение впоследствии в том же методе, более трудно рассуждать об оптимизации, которая может быть сделана, поэтому они менее вероятны. (Кто-то должен был бы запрограммировать компилятор, чтобы он делал это, рассуждал и гарантировал правильность и т. Д. Это было бы большой болью для чего-то, что должно было быть «исключительным») Но опять же, на практике вы не заметите таких вещей.