Изменения

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

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

198 байт добавлено, 17:33, 3 октября 2013
Обработка исключений
Чтобы сгенерировать исключение используется ключевое слово '''throw'''. Как и любой объект в Java, исключения создаются с помощью '''new'''.
<tt>if </tt> (t == <tt>null</tt>) <tt>throw new NullPointerException("t = null")</tt>;
Есть два конструктора для всех стандартных исключений: первый - конструктор по умолчанию, второй принимает строковый аргумент, поэтому можно поместить подходящую информацию в исключение.
Как и было сказано раньше, определение метода должно содержать список всех проверяемых исключений, которые метод может бросить. Также можно написать более общий класс, среди наследников которого есть эти исключения.
<tt>void </tt> f() <tt>throws InterruptedException, IOException </tt> { //...
===try-catch-finally===
Код, который может бросить исключения оборачивается в try-блок, после которого идут блоки catch и finally.
<tt>try </tt> {
// Код, который может сгенерировать исключение
}
Сразу после блока проверки следуют после обработчики исключений, которые объявляются ключевым словом '''catch'''.
<tt>try </tt> {
// Код, который может сгенерировать исключение
} <tt>catch</tt>(<tt>Type1 </tt> id1) {
// Обработка исключения Type1
} <tt>catch</tt>(<tt>Type2 </tt> id2) {
// Обработка исключения Type2
}
Блок finally удобен для закрытия файлов и освобождения любых других ресурсов. Код в блоке finally должен быть максимально простым. Если внутри блока finally будет брошено какое-либо исключение или просто встретится оператор return, брошенное в блоке try исключение (если таковое было брошено) будет забыто.
<tt>import </tt> java.io.IOException;
<tt>public class ExceptionTest </tt> {
<tt>public static void </tt> main(<tt>String[] </tt> args) { <tt>try </tt> { <tt>try </tt> { <tt>throw new Exception("a")</tt>; } <tt>finally </tt> { <tt>throw new IOException</tt>("b");
}
} <tt>catch (IOException ex) </tt> {
System.err.println(ex.getMessage());
} <tt>catch (Exception ex) </tt> {
System.err.println(ex.getMessage());
}
234
правки

Навигация