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

Ошибки в Java могут быть разбиты на две категории: ошибки времени разработки и логические ошибки. В этом уроке вы научитесь обработки исключений с помощью оператора try … catch.

Ошибки времени разработки легко обнаружить, потому что NetBeans обычно подчеркивает их. Если ошибка не позволит запустить программу, NetBeans подчеркнет ее красным.

Логические ошибки - это те, которые вы делаете как программист. Программа запустится, но, поскольку вы сделали что-то не так в коде, есть большая вероятность, что произойдет сбой. Вскоре вы увидите примеры ошибок во время выполнения. Вы также узнаете, как с ними справляться. Но сначала немного о том, как Java обрабатывает ошибки.

Java обработка исключений оператором try … catch

В Java ошибки обрабатываются объектом Exception (исключение). Исключения выбрасывают ошибки, а ваша задача - поймать их. Вы можете сделать это с помощью оператора try ... catch.

Блок try ... catch выглядит так:

try {

}
catch (ТипИсключения переменная_ошибки) {

}

Часть try блока try ... catch означает «попробовать этот код». Если что-то пойдет не так, Java перейдет к блоку catch. Java проверяет то, что в круглых скобках, обработали ли вы ошибку. Если у вас правильный тип исключения, тогда любой код, который у вас есть в фигурных скобках catch, будет выполнен. Если у вас неправильный типа исключения, Java будет использовать обработчик исключений по умолчанию для отображения сообщения об ошибке.

В качестве примера обработки исключений в Java создайте новое консольное приложение. Назовите его как вам угодно. В коде метода Main введите следующее:

try {
    int a = 5;
    int b = 0;
    int c = a / b;
        
    System.out.println(c);
}
catch (Exception show_error) {
    System.out.println(show_error.getMessage());
}

В части try блока try ... catch, мы создали три целых числа a, b и c. Мы хотим разделить a на b, а затем распечатать ответ.

Если что-то пойдет не так, у нас есть «план B». В круглых скобках мы написали это:

Exception show_error

Exception – это тип исключения, которое мы используем. В нашем случае это Exception объекта ошибки. Это тип исключения «поймать все» (catch all) и не самая лучшая практика программирования. Мы заменим Exception для обработки наших исключений Java на определенный тип в конце статьи.

После типа исключения идет имя переменной. Мы назвали нашу ошибку show_error, но вы можете называть свои ошибки как вам угодно.

В фигурных скобках catch у нас есть оператор println. Но главное, что мы поставили в круглых скобках println:

show_error.getMessage() 

getMessage - это метод, доступный объектам Exception. Как следует из его названия, он получает сообщение об ошибке, связанное с исключением.

Запустите программу и протестируйте ее. Ваш код должен выглядеть примерно так:

package errors;

public class ErrorsHand {

    public static void main(String[] args) {
        
        try {
            int a = 5;
            int b = 0;
            int c = a / b;

            System.out.println(c);
        }
        catch (Exception show_error) {
            System.out.println(show_error.getMessage());
        }
    }
    
}

И в окне «Вывод» должно отображаться следующее:

обработка исключений java пример

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

Измените в коде на это:

double a = 5.0;
double b = 0;
double c = a / b;

Остальная часть кода может остаться прежней. Запустите эту программу и протестируйте ее.

Опять же, сообщение об ошибке будет отображаться в окне вывода:

обработка исключений java пример 2

На этот раз Java останавливает программу, потому что результатом будет бесконечно большое число (Infinity).

Ошибки, связанные с числами, на самом деле не должны проходить обработку типом исключения «catch all». Существует определенный тип для такой обработки, называемый ArithmeticException. Удалите слово Exception в круглых скобках вашего блока catch. Замените его на ArithmeticException. Теперь запустите программу снова.

Вы не должны найти никакой разницы в сообщении об ошибке, отображаемом в окне вывода. Но вы используете правильную практику программирования, сужая тип ожидаемой ошибки.

Типы исключений

Исключения могут быть контролируемыми и неконтролируемыми. Разница состоит в следующем. Если метод может выбрасывать (генерировать) контролируемое исключение, и обработка этого исключения в методе не предусмотрена, то в сигнатуре этого метода необходимо указать ключевое слово throws и тип контролируемого исключения.

Самые распространенные неконтролируемые исключения Java

Тип исключения С чем связана ошибка
ArithmeticException Выполнение арифметических операций (например, деление на ноль)
ArrayIndexOutOfBoundsException Индекс массива выходит за допустимые границы
ArrayStoreException Присвоение элементу массива значения несовместимого типа
ClassCastException Попытка выполнить приведение несовместимых типов
IllegalArgumentException Методу указан неправильный аргумент
IllegalMonitorStateException Работа с монитором (относится к многопоточному программированию)
IllegalStateException Ресурс находится в некорректном состоянии
IllegalThreadStateException Предпринята попытка выполнить некорректную операцию на потоке
IndexOutOfBoundsException Индекс выходит за допустимый диапазон значений
NegativeArraySizeException Попытка создать массив отрицательного размера
NullPointerException Некорректное использование ссылок (обычно когда объектная переменная содержит пустую ссылку)
NumberFormatException Преобразование строки к числовому значению (когда в число преобразуется строка, содержащая некорректное текстовое представление числа)
SecurityException Попытка нарушить режим защиты
StringIndexOutOfBoundsException Неверное индексирование при работе с текстовой строкой
UnsupportedOperationException Попытка выполнить некорректную операцию

Контролируемые исключения Java

Тип исключения С чем связана ошибка
ClassNotFoundException Невозможно найти нужный класс
CloneNotSupportedException Некорректная попытка клонировать объект
IllegalAccessException Ошибка доступа к ресурсу
InstantiationException Попытка создать объект абстрактного класса или интерфейса
InterruptedException Прерывание одного потока другим
NoSuchFieldException Отсутствует нужное поле
NoSuchMethodException Отсутствует нужный метод

В следующем уроке вы узнаете, что такое отладка в Java.

Дата обновления: 29.08.2019

  • Текущий 0.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

/Рейтинг: 0.0/5 (0 голос(ов) всего)

Добавить комментарий (без регистрации)