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

Какие знаешь типы данных кроме примитивных?

1.3 Junior🔥 201 комментариев
#Основы Java

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

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

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

Типы данных в Java (кроме примитивных)

Помимо восьми примитивных типов (int, long, double, float, boolean, byte, short, char), Java имеет множество ссылочных типов и специальных конструкций.

1. Классы (Classes)

Любой класс — это тип данных. Переменная класса хранит ссылку на объект в памяти.

public class User {
    private String name;
    private int age;
}

User user = new User(); // user хранит ссылку, а не сам объект
User nullUser = null;   // ссылка может быть null

2. Интерфейсы (Interfaces)

Интерфейс определяет контракт и может использоваться как тип для переменных.

interface Animal {
    void makeSound();
}

Animal dog = new Dog();  // полиморфизм
Animal cat = new Cat();

3. Абстрактные классы (Abstract Classes)

Абстрактные классы предоставляют частичную реализацию и могут быть типом переменной.

abstract class Vehicle {
    abstract void move();
    void describe() { System.out.println("Vehicle"); }
}

Vehicle car = new Car();  // переменная типа abstract класса

4. Массивы (Arrays)

Массив — это ссылочный тип, коллекция элементов одного типа.

int[] numbers = {1, 2, 3};           // массив примитивов
String[] strings = {"a", "b", "c"}; // массив объектов
User[] users = new User[10];         // массив пользователей
int[][] matrix = {{1, 2}, {3, 4}};   // многомерный массив

5. Строки (String) — особый класс

String — это класс, но имеет специальное отношение с JVM. Строки immutable.

String text = "Hello";  // строка в пуле строк
String dynamic = "Hello" + " World";  // конкатенация
String formatted = String.format("Value: %d", 42);
char[] chars = text.toCharArray();  // конвертация в массив

6. Обёртки примитивов (Wrapper Classes)

Автоматическое преобразование примитивов в объекты.

Integer integer = 42;          // autoboxing
int primitive = integer;       // unboxing

Long longValue = 100L;
Double doubleValue = 3.14;
Boolean boolValue = true;

// Полезны в коллекциях
List<Integer> numbers = Arrays.asList(1, 2, 3);
Map<String, Integer> map = new HashMap<>();

7. Коллекции (Collections)

Фреймворк Collections предоставляет типы для работы с группами объектов.

// List — упорядоченная коллекция
List<String> list = new ArrayList<>();
list.add("element");

// Set — уникальные элементы
Set<Integer> set = new HashSet<>();
set.add(1);

// Map — пары ключ-значение
Map<String, User> users = new HashMap<>();
users.put("john", new User());

// Queue — очередь
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);

8. Enum — перечисления

Особый тип для определения фиксированного набора значений.

enum Status {
    ACTIVE, INACTIVE, PENDING
}

Status status = Status.ACTIVE;
if (status == Status.ACTIVE) { /* ... */ }

enum Color {
    RED("#FF0000"), GREEN("#00FF00");
    private String hex;
    Color(String hex) { this.hex = hex; }
}

9. Типы-переменные (Generics/Type Parameters)

Позволяют создавать обобщённые типы.

public class Container<T> {
    private T value;
    public void set(T value) { this.value = value; }
    public T get() { return value; }
}

Container<String> stringContainer = new Container<>();
Container<Integer> intContainer = new Container<>();

10. Анонимные классы и лямбды

Функциональные типы и анонимные реализации.

// Функциональный интерфейс
@FunctionalInterface
interface Operation {
    int apply(int a, int b);
}

// Лямбда-выражение
Operation add = (a, b) -> a + b;
int result = add.apply(5, 3);  // result = 8

// Stream API
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
nums.stream()
    .filter(n -> n > 2)
    .map(n -> n * 2)
    .forEach(System.out::println);

11. Записи (Records) — Java 14+

Лаконичный способ создания immutable data-классов.

public record Person(String name, int age) {}

Person person = new Person("John", 30);
System.out.println(person.name());  // getter автоматически

12. Sealed Classes — Java 15+

Классы, которые ограничивают, кто может их наследовать.

public sealed class Animal permits Dog, Cat {
    // только Dog и Cat могут наследоваться
}

public final class Dog extends Animal {}
public final class Cat extends Animal {}

Ключевые различия между типами

ТипРасположениеNullНаследование
КлассHeapДаМножественное через интерфейсы
Интерфейс--Множественное
ArrayHeapДаКовариантные массивы
EnumHeapДаНаследует Enum
RecordHeapДаExtends один класс

Все ссылочные типы имеют общий предок — Object. Понимание этого разнообразия типов критично для эффективной работы с Java.