Изменения

Перейти к: навигация, поиск

Обработка ошибок и исключения

946 байт добавлено, 22:41, 10 июня 2014
Исключения в Java7
* обработка нескольких типов исключений в одном <code>catch</code>-блоке:
<code><font color=navy>'''catch'''</font></code> (<tt>IOException</tt> | <tt>SQLException</tt> ex) {...}
В таких случаях параметры неявно являются <code>final</code>, поэтому нельзя присвоить им другое значение в блоке <code>catch</code>.
* <code>Try</code> с ресурсами позволяет прямо в <code>try</code>-блоке объявлять необходимые ресурсы, которые по завершению блока будут корректно закрыты (с помощью метода <code>close()</code>). Любой объект реализующий <code>java.lang.AutoCloseable</code> может быть использован как ресурс.
<tt><font color=navy>'''static '''</font> String</tt> readFirstLineFromFile(String path) <tt><font color=navy>'''throws '''</font> IOException</tt> { <tt><font color=navy>'''try'''</font></tt> (<tt>BufferedReader</tt> br = <tt><font color=navy>'''new '''</font> BufferedReader(<font color=navy>'''new '''</font> FileReader</tt>(path))) { <tt><font color=navy>'''return'''</font></tt> br.readLine();
}
}
Можно объявлять несколько ресурсов, разделяя их точкой с запятой:
<font color=navy>'''public static void '''</font> viewTable(Connection con) throws SQLException {
String query = <font color=green>"select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES"</font>;
<font color=navy>'''try '''</font> (Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query)) { <font color=gray>//Work with Statement and ResultSet</font> } <font color=navy>'''catch '''</font> (SQLException e) {
e.printStackTrace;
}
Компилятор Java SE 7 тщательнее анализирует перебрасываемые исключения. Рассмотрим следующий пример:
<font color=navy>'''static class '''</font> FirstException <font color=navy>'''extends '''</font> Exception { } <font color=navy>'''static class '''</font> SecondException <font color=navy>'''extends '''</font> Exception { }
<font color=navy>'''public void '''</font> rethrowException(String exceptionName) <font color=navy>'''throws '''</font> Exception { <font color=navy>'''try '''</font> { <font color=navy>'''if '''</font> (exceptionName.equals(<font color=green>"First"</font>)) { <font color=navy>'''throw new '''</font> FirstException(); } <font color=navy>'''else '''</font> { <font color=navy>'''throw new '''</font> SecondException();
}
} <font color=navy>'''catch '''</font> (Exception ex) { <font color=navy>'''throw '''</font> e;
}
}
В 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>:
<font color=navy>'''public void '''</font> rethrowException(String exceptionName) <font color=navy>'''throws '''</font> FirstException, SecondException { <font color=navy>'''try '''</font> { <font color=gray>// ...</font>
}
<font color=navy>'''catch '''</font> (Exception e) { <font color=navy>'''throw '''</font> e;
}
}
234
правки

Навигация