Обработка исключений.

Функции обработки исключений помогают справиться с непредвиденными или исключительными проблемами, которые возникают при выполнении программы. Обработка исключений использует ключевые слова try, catch и finally для действий, которые могут оказаться неудачными. Для того, что бы вызвать исключение используется ключевое слово throw

Для выполнения конструкций, которые могут создавать исключение следует испрользовать блок try.

Когда внутри блока try возникает исключение, поток управления переходит к первому подходящему обработчику исключений в стеке вызовов. Ключевое слово catch как раз и есть обработчик исключений.

Все объекты исключения содержат подробные сведения об ошибке, как например состояние стека вызовов и текстовое описание ошибки.

Код в блоке finally выполняется даже в том случае, если создано исключение. Блок finally следует использовать, чтобы высвободить ресурсы, например закрыть потоки и файлы, которые были открыты внутри блока try.

Кусок метода, запрашивающего данные с сервера. Если запрос провалился - генерируется исключение и метод возвращает null.

private String getData()
{
    String request = "https://assets.gelbooru.com/images/21/07/2107a4a1b2e1585facb7aeca892a1a65.jpg";
    String xml;
        try {
            xml = HttpRequest.get(request).body(); //попытка получить post-request
        } catch (HttpRequest.HttpRequestException e) { // Исключение вызывается в том случае, если что-то пошло не так(обрыв связи).
            e.printStackTrace();.//вывод подробных сведений об ошибке
            return null; 
        }
    return xml;
 }
//...

Блок try без блока catch или finaly вызовет ошибку компилятора. Блок сatch может определять тип перехватываемого исключения. Несколько блоков catch с различными фильтрами исключений могут быть соединены друг с другом. Блоки catch проверяются сверху вниз в коде, однако для каждого вызванного исключения выполняется только один блок catch. Выполняется первый блок catch, в котором указан точный тип или базовый класс вызванного исключения. Если нет блока catch, в котором определен соответствующий фильтр исключений, выбирается блок, в котором не выбран фильтр, если таковой имеется в операторе. Важно, чтобы первыми были размещены блоки catch с самыми производными типами исключений.

private char getData(char[] array, int index)
{
        try 
        {
            return array[index]; //попытка получить элемент массива
        } 
        catch(System.ArgumentOutOfRangeException e)
        {
             //Это исключение является производным от IndexOutOfRangeException, 
             //поэтому если поставить его после IndexOutOfRangeException, это будет бессмысленно.
             LogError(e);//вывод подробных сведений об ошибке
        } 
        catch (System.IndexOutOfRangeException e) { 
            LogError(e);//вывод подробных сведений об ошибке
        }
 // /~
 }
//...

results matching ""

    No results matching ""