Урок 16: Основы обработки исключений
В этом уроке мы рассмотрим основы обработки исключений в Java, которые позволяют управлять ошибками, возникающими во время выполнения программы.
Что такое исключения?
Исключения — это события, которые происходят во время выполнения программы и нарушают её нормальное выполнение. В Java исключения обрабатываются с помощью блоков try
, catch
и finally
.
Основные блоки для обработки исключений
Для обработки исключений используются следующие блоки:
try
- блок, в котором может возникнуть исключение
catch
- блок, который обрабатывает возникшее исключение
finally
- блок, который выполняется в любом случае, вне зависимости от того, возникло исключение или нет
Пример обработки исключений
Рассмотрим пример обработки исключений с использованием блоков try
, catch
и finally
:
public class ExceptionHandlingExample {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Индекс находится вне диапазона!");
} finally {
System.out.println("Этот блок выполняется всегда.");
}
}
}
Результат выполнения
Индекс находится вне диапазона!
Этот блок выполняется всегда.
Иерархия исключений
Все исключения в Java являются наследниками класса Throwable
. Существует два основных типа исключений:
Exception
- основные исключения, которые можно обрабатывать
Error
- исключения, которые обычно не должны обрабатываться (например, ошибки виртуальной машины)
Пользовательские исключения
В Java можно создавать собственные исключения, наследуя класс Exception
. Пример создания пользовательского исключения:
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
throw new CustomException("Это пользовательское исключение");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
}
}
Результат выполнения
Это пользовательское исключение
Упражнения
Упражнение 1: Деление на ноль
Напишите программу, которая делит два числа, введенные пользователем. Обработайте исключение ArithmeticException
, которое возникает при делении на ноль.
Решение:
import java.util.Scanner;
public class DivisionExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите делимое: ");
int dividend = scanner.nextInt();
System.out.print("Введите делитель: ");
int divisor = scanner.nextInt();
try {
int result = dividend / divisor;
System.out.println("Результат: " + result);
} catch (ArithmeticException e) {
System.out.println("Ошибка: деление на ноль!");
} finally {
System.out.println("Операция завершена.");
}
}
}
Объяснение: Программа запрашивает два числа у пользователя и делит их. Если делитель равен нулю, возникает исключение ArithmeticException
, которое обрабатывается в блоке catch
. Блок finally
выполняется в любом случае.
Упражнение 2: Проверка на отрицательное значение
Напишите программу, которая принимает число от пользователя и проверяет, является ли оно отрицательным. Если число отрицательное, выбросите пользовательское исключение NegativeNumberException
.
Решение:
import java.util.Scanner;
class NegativeNumberException extends Exception {
public NegativeNumberException(String message) {
super(message);
}
}
public class NegativeNumberCheck {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите число: ");
int number = scanner.nextInt();
try {
if (number < 0) {
throw new NegativeNumberException("Число не должно быть отрицательным!");
}
System.out.println("Вы ввели положительное число: " + number);
} catch (NegativeNumberException e) {
System.out.println(e.getMessage());
} finally {
System.out.println("Проверка завершена.");
}
}
}
Объяснение: Программа принимает число от пользователя и проверяет, является ли оно отрицательным. Если число отрицательное, выбрасывается пользовательское исключение NegativeNumberException
. Исключение обрабатывается в блоке catch
, и соответствующее сообщение выводится на экран. Блок finally
выполняется в любом случае.