Исключение (исключительная ситуация) — проблема, возникающая при выполнении программы.
Исключение — событие, происходящее при выполнении программы, нарушающей нормальный поток инструкций.
Евгений Мыца, Android Developer в emCodio и Преподаватель курсов по Java, рассказывает, что такое исключения и что с ними делать.
Некоторые причины:
- Пользователь ввел неверные данные
- Невозможно найти файл, который необходимо открыть
- Сетевое соединение было потеряно во время сеанса связи
- JVM не хватает памяти
Рекомендуем публикацию по теме
Типы исключений:
- Проверяемые исключения (Checked Exception)
Непроверяемые исключения (Unchecked Exception)
Ошибки (Errors)
Проверяемые исключения
Проверяемые исключения проверяются компилятором во время компиляции. Также их называют исключением времени компиляции. Нельзя просто игнорировать их, программист должен позаботиться об этих исключениях (обработать).
К примеру, используем класс FileReader для чтения данных из файла. Файл, указанный в его конструкторе, отсутствует. Возникает исключение FileNotFoundException. Компилятор предлагает обработать исключение.
Непроверяемые исключения
Непроверяемые исключения возникают при выполнении программы. Также называются исключениями времени исполнения (Runtime Exceptions). К ним относятся ошибки программирования, такие как логические ошибки или неправильное использование API. Исключения времени выполнения игнорируются во время компиляции.
Например, объявлен массив размером из 7 элементов. Пытаемся вызвать 8-й элемент массива. Возникает исключение ArrayIndexOutOfBoundsException.
Ошибки — это не исключения, а проблемы, возникающие вне контроля пользователя или программиста. Ошибки обычно игнорируются в коде, потому что редко что-нибудь можно сделать с ошибкой. Игнорируются при компиляции.
К примеру, такие как OutOfMemoryError, VirtualMachineError, IOError.
Классы ошибок и исключений
Класс Throwable — суперкласс всех ошибок и исключений в Java.
Только объекты, являющиеся экземплярами этого класса (или одного из его подклассов), генерируются виртуальной машиной Java или могут быть выброшены оператором throw Java.
Экземпляры двух подклассов класса Throwable, Error и Exception обычно используются для обозначения возникновения исключительных ситуаций.
Exception — большинство исключений, генерирующих объекты в коде программы.
Error обычно используется для серьезных ошибок в системе, например, препятствующих запуску JVM.
RuntimeException — суперкласс тех исключений, которые могут возникать при нормальной работе виртуальной машины Java. RuntimeException и его подклассы — непроверяемые исключения.
RuntimeException зарезервирован для исключений, указывающих на неправильное использование API.
Примером исключения времени выполнения является исключение NullPointerException, возникающее, когда метод пытается получить доступ к члену объекта через ссылку null.
Обработка исключений
Обработка исключений — процесс определения последовательности шагов в программе обработки исключения.
Предоставляя обработчики исключений в программе, мы можем обеспечить нормальное выполнение программы.
Без обработчиков исключений приложение будет завершено, и нормальный поток выполнения будет прерван в случае исключения.
Варианты обработки исключений:
- Перехват и обработка исключений
- Указание исключений, создаваемых методом
Для перехвата и обработки используются блоки try, catch и finally. Ключевое слово try используется для указания блока, в котором мы должны разместить код исключения. Мы не можем использовать только блок try. За блоком try должен следовать либо catch, либо finally.
Блок catch используется для обработки исключений.
Блок finally используется для выполнения требуемого программного кода. Выполняется независимо от того, обработано ли исключение.
При указании исключений, создаваемых методом, метод должен предоставить условие throws, в котором перечислены исключения.
Ключевое слово throws используется для объявления исключений. Указывает, что в способе может появиться исключение. Не вызывает исключение. Всегда используется с сигнатурой метода.