Изменения

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

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

307 байт добавлено, 18:55, 5 октября 2013
Обработка исключений
Чтобы сгенерировать исключение используется ключевое слово <code>throw</code>. Как и любой объект в Java, исключения создаются с помощью <code>new</code>.
'''if''' (t == '''null''') { '''throw new''' NullPointerException("t = null");
}
Как и было сказано раньше, определение метода должно содержать список всех проверяемых исключений, которые метод может бросить. Также можно написать более общий класс, среди наследников которого есть эти исключения.
'''void''' f() '''throws''' InterruptedException, IOException { //...
===try-catch-finally===
Код, который может бросить исключения оборачивается в <code>try</code>-блок, после которого идут блоки <code>catch</code> и <code>finally</code>.
'''try''' {
// Код, который может сгенерировать исключение
}
Сразу после блока проверки следуют после обработчики исключений, которые объявляются ключевым словом <code>catch</code>.
'''try''' {
// Код, который может сгенерировать исключение
} '''catch'''('''Type1''' id1) {
// Обработка исключения Type1
} '''catch'''('''Type2''' id2) {
// Обработка исключения Type2
}
Сatch-блоки обрабатывают исключения, указанные в качестве аргумента. Тип аргумента должен быть классом, унаследованного от <code>Throwable</code>, или самим <code>Throwable</code>. Блок <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>. Исходное исключение теряется.
===Информация об исключениях===
* <code>getMessage()</code>. Этот метод возвращает строку, которая была первым параметром при создании исключения;* <code>getCause() </code> возвращает исключение, которое стало причиной текущего исключения;* <code>printStackTrace() </code> печатает stack trace, который содержит информацию, с помощью которой можно определить причину исключения и место, где оно было брошено.
Exception in thread "main" java.lang.IllegalStateException: A book has a null property
at com.example.myproject.Author.getBookIds(Author.java:35)
Все методы выводятся в обратном порядке вызовов. В примере исключение <code>IllegalStateException </code> было брошено в методе <code>getBookIds</code>, который был вызван в <code>main</code>. "Caused by" означает, что исключение <code>NullPointerException </code> является причиной <code>IllegalStateException</code>.
==Разработка исключений==
234
правки

Навигация