Изменения
→Исключения в Java7
==Исключения в Java7==
* обработка нескольких типов исключений в одном <code>catch</code>-блоке:
<code>catch</code> (<tt>IOException</tt> | <tt>SQLException</tt> ex) {...}
В таких случаях параметры неявно являются <code>final</code>, поэтому нельзя присвоить им другое значение в блоке <code>catch</code>.
Байт-код, сгенерированный компиляцией такого <code>catch</code>-блока будет короче, чем код нескольких <code>catch</code>-блоков.
* <code>Try </code> с ресурсами позволяет прямо в <code>try</code>-блоке объявлять необходимые ресурсы, которые по завершению блока будут корректно закрыты (с помощью метода <code>close()</code>). Любой объект реализующий <code>java.lang.AutoCloseable</code> может быть использован как ресурс.
<tt>static String</tt> readFirstLineFromFile(String path) <tt>throws IOException</tt> {
}
В приведенном примере в качестве ресурса использутся объект класса <code>BufferedReader</code>, который будет закрыт вне зависимосити от того, как выполнится <code>try</code>-блок.
Можно объявлять несколько ресурсов, разделяя их точкой с запятой:
}
Во время закрытия ресурсов тоже может быть брошено исключение. В try-with-resources добавленна возможность хранения "подавленных" исключений, и брошенное <code>try</code>-блоком исключение имеет больший приоритет, чем исключения получившиеся во время закрытия. Получить последние можно вызовом метода <code>getSuppressed()</code> от исключения брошенного <code>try</code>-блоком.
* Перебрасывание исключений с улучшенной проверкой соответствия типов.
}
В примере <code>try</code>-блок может бросить либо <code>FirstException</code>, либо <code>SecondException</code>. В версиях до Java SE 7 невозможно указать эти исключения в декларации метода, потому что <code>catch</code>-блок перебрасывает исключение <code>ex</code>, тип которого - <code>Exception</code>.
В Java SE 7 вы можете указать, что метод <code>rethrowException</code> бросает только <code>FirstException</code> и <code>SecondException</code>. Компилятор определит, что исключение <code>Exception ex</code> могло возникнуть только в <code>try</code>-блоке, в котором может быть брошено <code>FirstException</code> или <code>SecondException</code>. Даже если тип параметра <code>catch </code> - <code>Exception</code>, компилятор определит что это экземпляр либо <code>FirstException</code>, либо <code>SecondException</code>:
public void rethrowException(String exceptionName) throws FirstException, SecondException {