Оператор throw
Оператор throw позволяет программисту
вручную выбросить исключение в любой момент
выполнения программы. В качестве параметра
оператор принимает объект исключения, который
должен быть наследником класса Throwable.
Чаще всего выбрасывают объекты классов
Exception или RuntimeException.
После выполнения оператора throw текущий
метод немедленно прекращает работу, а исключение
передается вверх по стеку вызовов до ближайшего
обработчика try-catch.
Синтаксис
throw new ExceptionType("message");
Пример
Давайте выбросим исключение, если возраст отрицательный:
public class Main
{
public static void checkAge(int age)
{
if (age < 0)
{
throw new IllegalArgumentException("Age cannot be negative");
}
System.out.println("Age: " + age);
}
public static void main(String[] args)
{
try
{
checkAge(-5);
}
catch (IllegalArgumentException e)
{
System.out.println("Caught: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Caught: Age cannot be negative"
Пример
Давайте выбросим собственное исключение из метода, который делит два числа:
public class Main
{
public static int divide(int a, int b)
{
if (b == 0)
{
throw new ArithmeticException("Division by zero is not allowed");
}
return a / b;
}
public static void main(String[] args)
{
try
{
int res = divide(10, 0);
System.out.println(res);
}
catch (ArithmeticException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Error: Division by zero is not allowed"
Пример
Давайте выбросим исключение внутри блока
catch, чтобы пробросить ошибку выше:
public class Main
{
public static void main(String[] args)
{
try
{
try
{
throw new RuntimeException("Inner error");
}
catch (RuntimeException e)
{
System.out.println("Inner caught: " + e.getMessage());
throw new IllegalStateException("Outer error", e);
}
}
catch (IllegalStateException e)
{
System.out.println("Outer caught: " + e.getMessage());
System.out.println("Cause: " + e.getCause().getMessage());
}
}
}
Результат выполнения кода:
"Inner caught: Inner error"
"Outer caught: Outer error"
"Cause: Inner error"