Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: Java, ClassCastException, type casting, runtime exception, type safety

Что такое ClassCastException?

Вопрос проверяет понимание ClassCastException в Java, чтобы оценить знание системы типов и безопасного приведения типов.

Короткий ответ

ClassCastException — это исключение времени выполнения в Java, которое возникает при попытке привести объект к типу, с которым он несовместим. Например, если у вас есть ссылка типа Object, которая на самом деле указывает на строку, и вы попытаетесь привести её к Integer, будет выброшено это исключение. Оно сигнализирует о нарушении безопасности типов и обычно указывает на ошибку в логике программы, связанную с неправильными предположениями о типах объектов.

Длинный ответ

ClassCastException — это непроверяемое исключение (unchecked exception), которое наследуется от RuntimeException. Оно возникает, когда JVM обнаруживает попытку приведения объекта к типу, который не является подтипом его реального типа. Это ключевой механизм обеспечения безопасности типов во время выполнения в Java.

Как и где это происходит

Такая ситуация часто возникает при работе с обобщёнными типами (generics) без указания типа, при использовании сырых типов (raw types) или при некорректном использовании наследования и полиморфизма. Например, при кастинге объектов, полученных из коллекций, где тип элементов не был строго задан.

Пример кода

public class Main {
    public static void main(String[] args) {
        Object obj = "Hello"; // Ссылка Object указывает на String
        try {
            Integer num = (Integer) obj; // Попытка приведения String к Integer
            System.out.println(num);
        } catch (ClassCastException e) {
            System.out.println("Ошибка приведения: " + e.getMessage());
        }
    }
}

В этом примере переменная obj объявлена как Object, но ей присвоена строка. При попытке явного приведения к Integer возникает ClassCastException, потому что строка не является целым числом.

Как избежать исключения

Перед приведением типа рекомендуется использовать оператор instanceof для проверки совместимости типов. Это позволяет безопасно выполнять кастинг.

if (obj instanceof Integer) {
    Integer safeNum = (Integer) obj;
    // Работаем с safeNum
} else {
    // Обрабатываем случай несовместимого типа
}

Использование дженериков с указанием конкретного типа также помогает предотвратить ClassCastException на этапе компиляции, перемещая проверки типов из времени выполнения в время компиляции.

Вывод: ClassCastException — это важный сигнал о нарушении контракта типов в программе. Его следует избегать, используя проверку instanceof перед приведением и максимально применяя строгую типизацию через дженерики, что делает код более безопасным и предсказуемым.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Java

    Java

Ключевые слова

#Java

#ClassCastException

#type casting

#runtime exception

#type safety

Подпишись на Java Developer в телеграм