Skip to content

Latest commit

 

History

History
174 lines (136 loc) · 6.29 KB

File metadata and controls

174 lines (136 loc) · 6.29 KB

⚠️ ArithmeticException: деление на ноль

ArithmeticException возникает при делении на ноль или других арифметических ошибках.
В этом материале я разбираю 4 способа обработки этой ошибки — от самого простого до более продвинутого.


Что такое ArithmeticException?

Когда в Java мы пытаемся разделить число на ноль:

int result = 10 / 0;  // ❌ ArithmeticException

Программа падает с ошибкой. Чтобы этого избежать, используем try-catch.

Пример 1: обрабатываем только ArithmeticException

Код:

public static void main(String[] args) {
    int a = 10;
    int b = 0;
    try {
        System.out.println(a / b);
    } catch (ArithmeticException e) {
        System.out.println("Деление на ноль");
    }
}

Что происходит:

  1. try — пытаемся выполнить деление 10 / 0
  2. Возникает ArithmeticException
  3. catch (ArithmeticException e) — ловим именно эту ошибку
  4. Выводим сообщение "Деление на ноль"

Вывод:

Деление на ноль

Мои заметки:

Этот catch поймает только ArithmeticException. Если возникнет любая другая ошибка, программа всё равно упадёт.


Пример 2: обрабатываем все исключения (Exception)

Код:

public static void main(String[] args) {
    int a = 10;
    int b = 0;

    try {
        System.out.println(a / b);
    } catch (Exception e) {
        System.out.println("Деление на 0");
    }
}

Что происходит:

  1. catch (Exception e) — ловит любое исключение, потому что Exception — это родитель всех исключений

Вывод:

Деление на 0

Мои заметки:

Exception ловит всё: и ArithmeticException, и NullPointerException, и любые другие.
Удобно, но иногда слишком широко — не поймёшь, какая именно ошибка случилась.


Пример 3: несколько catch блоков

Код:

public static void main(String[] args) {
    int a = 10;
    int b = 0;

    try {
        System.out.println(a / b);
    } catch (ArithmeticException e) {
        System.out.println("Деление на 0");
    } catch (Exception e) {
        System.out.println("Другая ошибка");
    }
}

Что происходит:

  1. Сначала Java пытается подойти под ArithmeticException — подходит, так как ошибка именно эта
  2. Первый catch обрабатывает ошибку, второй catch игнорируется

Вывод:

Деление на 0

Мои заметки:

  • catch проверяются по порядку: от частного к общему
  • ArithmeticException — частный случай Exception, поэтому он должен идти первым
  • Если поменять порядок (сначала Exception, потом ArithmeticException) — будет ошибка компиляции

Пример 4: выбрасываем исключение вручную через throw

Код:

public static void main(String[] args) {
    int a = 10;
    int b = 0;
    try {
        System.out.println(divide(a, b));
    } catch (Exception e) {
        System.out.println("Ошибка: " + e.getMessage());
    }
}

public static int divide(int a, int b) {
    if (b == 0) {
        throw new ArithmeticException("Делить на ноль нельзя");
    }
    return a / b;
}

Что происходит:

  1. В методе divide проверяем, не равен ли b нулю
  2. Если b == 0 — сами создаём исключение через throw new ArithmeticException(...)
  3. В main ловим это исключение и выводим сообщение из исключения через e.getMessage()

Вывод:

Ошибка: Делить на ноль нельзя

Мои заметки:

  • throw — создаёт исключение вручную (в отличие от throws, который просто объявляет, что исключение может быть)
  • e.getMessage() — возвращает текст, который мы передали в конструктор исключения
  • Этот подход позволяет создавать понятные сообщения об ошибках

Сравнение всех четырёх примеров

Пример Что делает Когда использовать
1 Ловит только ArithmeticException Когда нужно обработать конкретную ошибку
2 Ловит все исключения (Exception) Когда нужно перехватить любую ошибку
3 Несколько catch для разных типов Когда на разные ошибки нужны разные действия
4 throw + своё сообщение Когда нужно самим решить, когда выбрасывать исключение

Что я запомнила

  • ArithmeticException — возникает при делении на ноль
  • catch (Exception e) — ловит все исключения
  • Порядок catch важен: от частного к общему
  • throw — создаём исключение сами
  • e.getMessage() — получаем текст ошибки

⭐ Когда моя программа падает с ArithmeticException, я открываю этот файл и вспоминаю, как правильно обрабатывать деление на ноль.