Изменения
→try-catch-finally
===try-catch-finally===
Код, который может бросить исключения оборачивается в <code>try</code>-блок, после которого идут блоки <code>catch </code> и <code>finally </code> (Последний может быть опущен).
try {
<code>Сatch</code>-блоки обрабатывают исключения, указанные в качестве аргумента. Тип аргумента должен быть классом, унаследованного от <code>Throwable</code>, или самим <code>Throwable</code>. Блок catc <code>catch</code> выполняется, если тип брошенного исключения является наследником типа аргумента и если это исключение не было обработано предыдущими блоками.
Код из блока <code>finally </code> выполнится в любом случае: при нормальном выходе из <code>try</code>, после обработки исключения или при выходе по команде <code>return</code>.
'''NB:''' Если JVM выйдет во время выполнения кода из <code>try </code> или <code>catch</code>, то <code>finally</code>-блок может не выполниться. Также, например, если поток выполняющий <code>try </code> или <code>catch </code> код остановлен, то блок <code>finally </code> может не выполниться, даже если приложение продолжает работать.
Блок <code>finally </code> удобен для закрытия файлов и освобождения любых других ресурсов. Код в блоке <code>finally </code> должен быть максимально простым. Если внутри блока <code>finally </code> будет брошено какое-либо исключение или просто встретится оператор <code>return</code>, брошенное в блоке <code>try </code> исключение (если таковое было брошено) будет забыто.
<tt>import</tt> java.io.IOException;
}
После того, как было брошено первое исключение - <code>new Exception("a")</code> - будет выполнен блок <code>finally</code>, в котором будет брошено исключение <code>new IOException("b")</code>, именно оно будет поймано и обработано. Результатом его выполнения будет вывод в консоль <code>b</code>. Исходное исключение теряется.
===Обработка исключений, вызвавших завершение потока===