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

На какие группы делятся базовые классы в иерархии

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
└──

Группировка по назначению

ГруппаПримерыНазначение
WrappersInteger, StringОборачивают примитивы
CollectionsArrayList, HashMapХранение данных
ExceptionsIOException, NPEОбработка ошибок
UtilityMath, SystemВспомогательные функции
TimeLocalDate, InstantРабота с датой/временем
TypeClass, EnumМетаинформация
ThreadingThread, RunnableМногопоточность

Выводы

  1. Все классы наследуют от Object
  2. Основные группы: Wrappers, Strings, Collections, Exceptions, Utility
  3. Каждая группа имеет четкую иерархию и назначение
  4. Знание этих групп критично для написания качественного Java кода
На какие группы делятся базовые классы в иерархии | PrepBro