← Назад к вопросам
На какие группы делятся базовые классы в иерархии
1.8 Middle🔥 111 комментариев
#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Группы базовых классов в Java иерархии
Отличный вопрос о базовых классах и их классификации! Все классы в Java наследуют от единственного корневого класса Object. Позвольте мне разобраться в том, как организована иерархия базовых классов.
Корневой класс Object
Все классы в Java наследуют от класса java.lang.Object. Он содержит базовые методы для всех объектов:
public class Object {
public String toString() // Строковое представление
public boolean equals(Object) // Сравнение объектов
public int hashCode() // Хеш-код для коллекций
public Class getClass() // Получить Class объекта
public void notify() // Синхронизация потоков
public void notifyAll() // Синхронизация потоков
public void wait() // Синхронизация потоков
public void wait(long timeout) // Синхронизация потоков
public void wait(long, int) // Синхронизация потоков
protected void finalize() // Финализация (deprecated)
protected Object clone() // Клонирование объекта
}
Группы базовых классов
Базовые классы Java можно разделить на следующие группы:
1. Классы-обертки (Wrapper Classes)
Оборачивают примитивные типы в объекты:
// Все наследуют от Number (кроме Character и Boolean)
public class WrapperExample {
// Целые числа
Byte b = 127; // byte wrapper
Short s = 32000; // short wrapper
Integer i = 42; // int wrapper (ЧАСТО ИСПОЛЬЗУЕТСЯ)
Long l = 9999999999L; // long wrapper
// Числа с плавающей точкой
Float f = 3.14f; // float wrapper
Double d = 3.14159; // double wrapper (ЧАСТО ИСПОЛЬЗУЕТСЯ)
// Логический и символ
Boolean flag = true; // boolean wrapper
Character ch = 'A'; // char wrapper
}
Иерархия wrapper классов:
Object
├── Number (abstract)
│ ├── Byte
│ ├── Short
│ ├── Integer
│ ├── Long
│ ├── Float
│ └── Double
├── Boolean
└── Character
Практические примеры:
// Автоunboxing и autoboxing
Integer num = 10; // Autoboxing: Integer.valueOf(10)
int primitive = num; // Unboxing: num.intValue()
// Методы для работы
Integer.parseInt("42"); // Парсинг строки
Double.parseDouble("3.14"); // Парсинг строки
Integer.MIN_VALUE; // -2147483648
Integer.MAX_VALUE; // 2147483647
// Кэширование для Integer
Integer a = 10;
Integer b = 10;
System.out.println(a == b); // true - используется кэш (-128..127)
Integer x = 200;
Integer y = 200;
System.out.println(x == y); // false - за пределами кэша
2. Строковые классы (String-related)
// Иерархия строковых классов
Object
├── String (immutable, final)
├── StringBuffer (mutable, synchronized)
└── StringBuilder (mutable, not synchronized)
Различия:
// String - неизменяемый, потокобезопасный
String str = "Hello";
str = str + " World"; // Создает новый объект
// StringBuffer - изменяемый, потокобезопасный
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World"); // Изменяет тот же объект, synchronized
String result = sb.toString();
// StringBuilder - изменяемый, НЕ потокобезопасный
StringBuilder sbb = new StringBuilder("Hello");
sbb.append(" World"); // Быстрее, но не thread-safe
String result2 = sbb.toString();
// Performance тест
long start = System.currentTimeMillis();
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb2.append(i).append(", ");
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("Elapsed: " + elapsed + "ms"); // ~5ms
3. Классы исключений (Exception Classes)
// Иерархия исключений
Object
└── Throwable
├── Exception (checked)
│ ├── IOException
│ ├── SQLException
│ ├── RuntimeException (unchecked)
│ │ ├── NullPointerException
│ │ ├── IllegalArgumentException
│ │ ├── ArrayIndexOutOfBoundsException
│ │ └── ClassCastException
│ └── ...
└── Error (не ловим)
├── OutOfMemoryError
├── StackOverflowError
└── ...
Примеры использования:
// Checked exception - ДОЛЖНЫ ловить
try {
FileInputStream fis = new FileInputStream("file.txt");
} catch (IOException e) {
e.printStackTrace();
}
// Unchecked exception - ловим если нужно
public void process(String input) {
if (input == null) {
throw new IllegalArgumentException("Input cannot be null");
}
// ...
}
// Custom exception
public class BusinessException extends Exception {
public BusinessException(String message) {
super(message);
}
}
4. Классы коллекций (Collection Classes)
// Иерархия Collections Framework
Object
├── Collection (interface)
│ ├── List
│ │ ├── ArrayList
│ │ ├── LinkedList
│ │ └── CopyOnWriteArrayList
│ ├── Set
│ │ ├── HashSet
│ │ ├── TreeSet
│ │ └── LinkedHashSet
│ └── Queue
│ ├── PriorityQueue
│ ├── LinkedList
│ └── ArrayDeque
└── Map
├── HashMap
├── TreeMap
├── LinkedHashMap
├── Hashtable
├── ConcurrentHashMap
└── WeakHashMap
Примеры:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1); // Не добавится (уже есть)
Map<String, Integer> map = new HashMap<>();
map.put("age", 25);
map.put("salary", 50000);
5. Классы для типов данных (Type Classes)
// Class - метаинформация о классах
Class<?> stringClass = String.class;
Class<?> intClass = Integer.class;
StringClass.getName(); // "java.lang.String"
stringClass.getMethods(); // Все методы
stringClass.getDeclaredFields(); // Все поля
// Enum - базовый класс для enum
public enum Color {
RED, GREEN, BLUE
}
// Reflection
Class<?> clazz = Class.forName("java.lang.String");
Object obj = clazz.newInstance();
6. Утилитарные классы (Utility Classes)
// Math - математические операции
Math.abs(-5); // 5
Math.max(10, 20); // 20
Math.sqrt(16); // 4.0
Math.random(); // [0.0, 1.0)
// System - системные операции
System.out.println("Hello");
System.getProperty("java.version");
System.currentTimeMillis();
System.exit(0);
// Runtime - информация о среде выполнения
Runtime runtime = Runtime.getRuntime();
runtime.maxMemory(); // Максимум памяти
runtime.totalMemory(); // Текущая память
runtime.freeMemory(); // Свободная память
7. Классы для работы с временем (Date/Time)
// java.util.Date - старый стиль (deprecated)
Date date = new Date();
// java.time - новый стиль (Java 8+)
LocalDate today = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
Instant instant = Instant.now();
// Операции
LocalDate tomorrow = today.plusDays(1);
boolean isBefore = today.isBefore(tomorrow);
8. Классы для потоков (Thread Classes)
// Thread
Thread thread = new Thread(() -> {
System.out.println("Running in thread");
});
thread.start();
// Runnable
Runnable task = () -> System.out.println("Task");
// Synchronization
synchronized(object) {
// Thread-safe блок
}
Визуальная иерархия
java.lang.Object
├─────────────────────────────────────┬─────────────────────────────────┐
│ │ │
Числовые классы Строковые классы Другие
├── Byte, Short ├── String ├── Class
├── Integer, Long ├── StringBuffer ├── Enum
├── Float, Double ├── StringBuilder ├── Thread
├── Boolean, Character └── └── Exception
└──
Группировка по назначению
| Группа | Примеры | Назначение |
|---|---|---|
| Wrappers | Integer, String | Оборачивают примитивы |
| Collections | ArrayList, HashMap | Хранение данных |
| Exceptions | IOException, NPE | Обработка ошибок |
| Utility | Math, System | Вспомогательные функции |
| Time | LocalDate, Instant | Работа с датой/временем |
| Type | Class, Enum | Метаинформация |
| Threading | Thread, Runnable | Многопоточность |
Выводы
- Все классы наследуют от Object
- Основные группы: Wrappers, Strings, Collections, Exceptions, Utility
- Каждая группа имеет четкую иерархию и назначение
- Знание этих групп критично для написания качественного Java кода