int[] numbers = new int[3];
numbers[4] = 45;
System.out.println(numbers[4]);int[] numbers = new int[3];
numbers[4] = 45;
System.out.println(numbers[4]);Что делать если произошла нештатная ситуация, ошибка во время выполнения программы?
Например:
Пользователь ввел некорректные данные.
Не смогли подключиться к стороннему сервису.
Не найден файл с которым выполняются какие-то действия.
Не выполняются бизнес требования.

ThrowableError
Exception
Errorпредставляют собой более серьёзные проблемы
согласно спецификации Java, не следует пытаться обрабатывать в собственной программе
связаны с проблемами уровня JVM
ErrorStackOverflowError
OutOfMemoryError
UnknownError
etc.
Exceptionявляются результатом проблем в программе
в принципе решаемы и предсказуемы
ExceptionRuntimeException (unchecked exceptions)
Another Exception (checked exceptions)
unchecked (неконтролируемые)
RuntimeException и его наследники
Error и его наследники
checked (контролируемые)
все остальные
RuntimeExceptionNullPointerException - неверное использование пустой ссылки
ClassCastException - неверное приведение
ArrayIndexOutOfBoundsException - выход индекса за границу массива
NumberFormatException - неверное преобразование строки в числовой формат
ArithmeticException - арифметическая ошибка, например, деление на нуль
ArrayStoreException - присваивание элементу массива объекта несовместимого типа
ClassNotFoundException - класс не найден
CloneNotSupportedException - попытка клонировать объект, который не реализует интерфейс Cloneable
IllegalAccessException - запрещен доступ к классу
InstantiationException - попытка создать объект абстрактного класса или интерфейса
InterruptedException - поток прерван другим потоком
NoSuchFieldException - запрашиваемое поле не существует
NoSuchMethodException - запрашиваемый метод не существует
int[] numbers = new int[3];
numbers[4] = 45;
System.out.println(numbers[4]);try…catchtry {
int[] numbers = new int[3];
numbers[4] = 45;
System.out.println(numbers[4]);
} catch (Exception e) {
// error processing
// usually logging
}
System.out.println("Программа завершена");try…catch…finallytry {
int[] numbers = new int[3];
numbers[4] = 45;
System.out.println(numbers[4]);
} catch (Exception e) {
// exception processing
// usually logging
} finally {
// mandatory actions AFTER exception processing
}
System.out.println("Программа завершена");catchcatchint[] numbers = new int[3];
try {
numbers[6] = 45;
numbers[6] = Integer.parseInt("gfd");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Выход за пределы массива");
} catch (NumberFormatException e) {
System.out.println("Ошибка преобразования из строки в число");
}catchint[] numbers = new int[3];
try {
numbers[6] = 45;
numbers[6] = Integer.parseInt("gfd");
} catch (Exception e) {
System.out.println("Какой-то Exception"); // WRONG!!!
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Выход за пределы массива");
} catch (NumberFormatException e) {
System.out.println("Ошибка преобразования из строки в число");
}catchint[] numbers = new int[3];
try {
numbers[6] = 45;
numbers[6] = Integer.parseInt("gfd");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Ошибка при обработке массива чисел");
} catch (NumberFormatException e) {
System.out.println("Ошибка при обработке массива чисел");
}catchint[] numbers = new int[3];
try {
numbers[6] = 45;
numbers[6] = Integer.parseInt("gfd");
} catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {
System.out.println("Ошибка при обработке массива чисел");
}throwimport java.util.Scanner;
public class FirstApp {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
if (x >= 30) {
throw new Exception("Число х должно быть меньше 30");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Программа завершена");
}
}throwspublic static int getFactorial(int num) throws Exception {
if (num < 1) {
throw new Exception("The number is less than 1");
}
int result = 1;
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}throwspublic static void main(String[] args) {
int result = getFactorial(-6); // compile error
System.out.println(result);
}throwspublic static void main(String[] args) {
try {
int result = getFactorial(-6);
System.out.println(result);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}throwspublic static int getFactorial(int num) {
int result = 1;
try {
if (num < 1) {
throw new Exception("The number is less than 1");
}
for (int i = 1; i <= num; i++) {
result *= i;
}
} catch (Exception e) {
System.out.println(e.getMessage());
result = num;
}
return result;
}class FactorialException extends Exception {
private int number;
public int getNumber() {
return number;
}
public FactorialException(String message, int num) {
super(message);
number = num;
}
}class Factorial {
public static int getFactorial(int num) throws FactorialException {
int result = 1;
if (num < 1) {
throw new FactorialException("The number is less than 1", num);
}
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}
}