Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды исключений в 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
Понимание типов исключений критично для написания надёжного и поддерживаемого кода.