Я просматриваю новый код. В программе есть только блок попыток и окончание. Поскольку блок catch исключен, как работает блок try, если он встречает исключение или что-то бросаемое? Он просто переходит непосредственно в блок finally?
java
try-catch
finally
try-catch-finally
try-finally
NullPointer0x00
источник
источник
Ответы:
Если какой-либо код в блоке try может вызвать проверенное исключение, оно должно появиться в предложении throws сигнатуры метода. Если выбрано непроверенное исключение, оно выскакивает из метода.
Блок finally всегда выполняется, независимо от того, выброшено исключение или нет.
источник
Небольшое примечание по
try
/finally
: finally всегда будет выполняться, еслиSystem.exit()
называется.try{}
блоке не заканчивается (например , бесконечный цикл).источник
try{..} catch{ throw ..} finally{..}
? Думаю ваще не исполнятСпецификация языка Java (1) описывает, как
try-catch-finally
выполняется. Отсутствие улова эквивалентно отсутствию улова, способного поймать данный Throwable.(1) Выполнение try-catch-finally
источник
Внутреннее значение finally выполняется до выброса исключения во внешний блок.
Результаты в
источник
Блок finally всегда запускается после завершения блока try, независимо от того, заканчивается ли попытка нормально или ненормально из-за исключения, например, throwable.
Если какой-либо код в блоке try вызывает исключение, текущий метод просто повторно генерирует (или продолжает генерировать) то же исключение (после выполнения блока finally).
Если блок finally выдает исключение / ошибку / выброс и уже есть ожидающий выброс, он становится некрасивым. Откровенно говоря, я забываю, что именно происходит (так много лет назад я получил сертификат). Я думаю, что обе метательные объекты связаны друг с другом, но есть какое-то особое колдовство, которое вам нужно сделать (то есть - вызов метода, который мне нужно было бы найти), чтобы получить исходную проблему до того, как "наконец-то" вырвало, э-э ...
Между прочим, try / finally - довольно распространенная вещь для управления ресурсами, поскольку в java нет деструкторов.
Например -
«Наконец», еще один совет: если вы действительно потрудились поставить в улове, либо поймать конкретный (ожидается) Throwable подклассов, или просто поймать «Throwable», не «Исключение», для общего приема всей ловушки ошибок. Слишком много проблем, таких как тупицы с отражением, выбрасывают «Ошибки», а не «Исключения», и они ускользнут от любого «улова всех», закодированного как:
сделайте это вместо этого:
источник
Версии Java до версии 7 допускают эти три комбинации try-catch-finally ...
finally
блок будет всегда выполняться независимо от того, что происходит в блокеtry
или / иcatch
. поэтому, еслиcatch
блока нет , исключение здесь обрабатываться не будет.Тем не менее, вам все равно понадобится обработчик исключений где-нибудь в вашем коде - если, конечно, вы не хотите, чтобы ваше приложение полностью аварийно завершило работу. Это зависит от архитектуры вашего приложения, где именно находится этот обработчик.
источник
Исключение выбрасывается из блока, как и в любом другом случае, когда оно не перехвачено.
Блок finally выполняется независимо от того, как завершается блок try - независимо от того, есть ли вообще какие-либо уловки, независимо от того, есть ли совпадающий улов.
Блоки catch и finally являются ортогональными частями блока try. Вы можете иметь одно или оба. С Java 7 у вас не будет ни того, ни другого!
источник
Разве вы не пробовали это с этой программой? Он перейдет к блоку finally и выполнит блок finally, но исключение не будет обработано. Но это исключение можно отменить в блоке finally!
источник
Блок finally выполняется после завершения блока try. Если что-то брошено внутри блока try, когда оно выходит, выполняется блок finally.
источник
Внутри
try
блока мы пишем коды, которые могут вызывать исключение. Вcatch
блоке мы обрабатываем исключение.finally
Блок не всегда выполняется независимо от того , происходит ли исключение или нет.Теперь, если у нас есть блок try-finally вместо блока try-catch-finally, то исключение не будет обрабатываться, и после блока try вместо блока управления, собирающегося перехватить блок, оно перейдет в блок finally. Мы можем использовать блок try-finally, когда мы не хотим ничего делать за исключением.
источник
Независимо от того, выброшено исключение или нет в
try
блоке -finally
блок будет выполнен. Исключение не будет обнаружено.источник