Ошибки и исключения

Типы данных и исключения в Java

Jim White

Java Developer

Исключения и ошибки

  • Error — серьёзная неисправность в работе программы
  • Приложения не могут обработать и восстановиться после ошибок
    • Ошибки приводят к «аварийному завершению» работы приложения
    • Пример: нехватка памяти в Java — это ошибка
  • Приложения могут обработать и восстановиться после исключений
    • Обращение к элементам за пределами массива — это исключение.
Типы данных и исключения в Java
Пример ошибки
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Типы данных и исключения в Java

Два типа исключений

Проверяемое исключение Исключение времени выполнения («непроверяемое»)
Требует обработки Да Нет
Общая причина Внешние факторы вне нашего контроля Ошибки в нашем коде
Восстановление Как правило, возможно при ожидаемой ситуации Обычно невозможно
Механизм обработки try/catch или throws Лучше писать код так, чтобы их избежать
Пример исключения Файл не найден Индекс массива выходит за границы
Типы данных и исключения в Java

Проверяемые и непроверяемые исключения

  • Подклассы Exception, не являющиеся подклассами RuntimeException, — это проверяемые исключения
    • Должны быть обработаны
    • Пример: файл не найден (FileNotFoundException)
  • RuntimeException — суперкласс всех непроверяемых исключений
    • Не требуют обязательной обработки
    • Пример: обращение к несуществующему индексу массива (IndexOutOfBoundsException)
    • Пример: деление на ноль (ArithmeticException)
Типы данных и исключения в Java

RuntimeException

Подкласс RuntimeException Описание ситуации, при которой возникает
ArithmeticException Недопустимые арифметические операции, например деление на 0
IndexOutOfBoundsException Индекс массива, строки и т. д. выходит за допустимые границы
NegativeArraySizeException Попытка создать массив с отрицательным размером
int y = 5/0; // ArithmeticException causing code
int[] list = new int[-1];  //NegativeArraySizeException causing code
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Типы данных и исключения в Java

«Проверяемое» исключение

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Типы данных и исключения в Java

Давайте потренируемся!

Типы данных и исключения в Java

Preparing Video For Download...