Изменения

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

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

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

Навигация