Иерархия исключений
Исключение в программировании - это событие, которое возникает во время выполнения программы и нарушает нормальный поток ее работы
Обработка исключений
В Java, обработка исключений может быть осуществлена двумя основными способами: либо обработать исключение непосредственно в месте его возникновения, либо пробросить его дальше, чтобы оно было обработано на более высоком уровне
Конструкция try-catch-finally
Синтаксис:
try {
// испольняемый код,
// который может сгенерировать исключение
} catch (Exception exception) {
// обработка исключения
} finally {
// общий код, который выполнится в любом случае
}
Пример обработки разных типов исключений:
class Main {
public static void main(String[] args) {
try {
// испольняемый код,
// который может сгенерировать исключение
System.out.println("try -- body");
var ex = new ArithmeticException();
throw ex;
} catch (ArithmeticException | IndexOutOfBoundsException exception) {
// обработка исключения ArithmeticException или IndexOutOfBoundsException
System.out.println("try -- ArithmeticException | IndexOutOfBoundsException handler");
} catch (Exception exception) {
// обработка остальных исключений
System.out.println("try -- Exception handler");
} finally {
// общий код, который выполнится в любом случае
System.out.println("try -- finally");
}
}
}
Конструкция try-with-resource
Конструкция try with resources - это особый вид блоков try
, который позволяет автоматически закрывать ресурсы, такие как файлы, сокеты или соединения с базой данных, после их использования. Это достигается за счет реализации интерфейса Closeable
, который гарантирует, что ресурсы будут закрыты, даже если в блоке try возникнет исключение
try (FileWriter fileWriter = new FileWriter("filename.txt")) {
filewriter.append ("some string");
} catch (IOException e) {
e.printstackTrace();
}
Ключевое слово throws
В Java, ключевое слово throws
используется для указания того, что метод может генерировать определенное исключение, которое не будет обработано внутри метода, а будет передано вызывающему коду. Это означает, что метод не будет обрабатывать исключение, а вместо этого сообщит о его возможности вызывающему коду, который должен будет его обработать или передать дальше
public static void method() throws IOException {
throw new IOException();
}
Генерация исключений
Часто в процессе разработки приходится генерировать (выбрасывать) исключения вручную. Например, при валидации входных данных пользователя. Для генерации исключения используется ключевое слово throw
public void validateAge (int age) {
if (age < 6) {
throw new RuntimeException("Пользователь должен быть старше 6 лет");
}
if (age > 18) {
throw new RuntimeException("Пользователь должен быть младше 18 лет");
}
}
Реализация собственных исключений
В Java, реализация собственных исключений позволяет разработчикам создавать пользовательские исключения, которые могут быть использованы для обработки конкретных ошибок или ситуаций в программе.
Для реализации собственного исключения необходимо создать класс, унаследованный от классов RuntimeException
(непроверяемое исключение) или Exception
(проверяемое исключение)
public class ValidationException extends RuntimeException {
public string fieldName;
public ValidationException(String message, String fieldName) {
super (message);
this.fieldName = fieldName;
}
}
Дополнительные материалы

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.