← Назад к вопросам

Какие знаешь виды Exception?

1.0 Junior🔥 201 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды исключений в Java

Исключения (exceptions) в Java подразделяются на несколько категорий, каждая из которых играет важную роль в обработке ошибок и управлении потоком выполнения приложения.

Иерархия исключений

Все исключения наследуют класс Throwable:

Throwable
├── Exception
│   ├── Checked Exceptions
│   │   ├── IOException
│   │   ├── SQLException
│   └── Unchecked Exceptions (RuntimeException)
│       ├── NullPointerException
│       └── ClassCastException
└── Error
    ├── OutOfMemoryError
    └── StackOverflowError

1. Checked Exceptions

Это исключения, которые ДОЛЖНЫ быть обработаны или объявлены:

public void readFile(String path) throws IOException {
    try (FileInputStream fis = new FileInputStream(path)) {
        byte[] data = new byte[1024];
        fis.read(data);
    }
}

Примеры: IOException, SQLException, InterruptedException.

2. Unchecked Exceptions (RuntimeException)

Исключения, которые не требуют обязательной обработки:

String str = null;
int length = str.length();  // NullPointerException

int[] arr = new int[5];
int value = arr[10];  // ArrayIndexOutOfBoundsException

Object obj = "Hello";
Integer num = (Integer) obj;  // ClassCastException

int result = 10 / 0;  // ArithmeticException

Примеры: NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException, IllegalArgumentException, NumberFormatException.

3. Error (Ошибки JVM)

Критические ошибки, обычно не подлежат обработке:

// OutOfMemoryError
List<byte[]> list = new ArrayList<>();
while (true) {
    list.add(new byte[1024 * 1024]);
}

// StackOverflowError
public void recursiveCall() {
    recursiveCall();  // Бесконечная рекурсия
}

Примеры: OutOfMemoryError, StackOverflowError, NoClassDefFoundError.

4. Собственные исключения

public class ValidationException extends RuntimeException {
    private final List<String> errors;
    
    public ValidationException(String message, List<String> errors) {
        super(message);
        this.errors = errors;
    }
}

public class DatabaseException extends Exception {
    public DatabaseException(String message, Throwable cause) {
        super(message, cause);
    }
}

5. Обработка исключений

try {
    // код
} catch (SQLException e) {
    log.error("Database error", e);
} catch (IOException e) {
    log.error("IO error", e);
} finally {
    // очистка ресурсов
}

Best Practices

  • Используй специфичные исключения вместо общей Exception
  • Логируй с контекстом и причиной
  • Используй try-with-resources для управления ресурсами
  • Не глушь исключения молча
  • Пробрасывай исключения с контекстом, используя cause

Понимание типов исключений критично для написания надёжного и поддерживаемого кода.