instanceof — оператор Java, который проверяет, является ли объект экземпляром указанного класса или реализует интерфейс. Это полезно в ООП (наследование и полиморфизм), когда переменная имеет тип родителя, а фактический объект — один из наследников. Часто используется перед приведением типов, чтобы избежать ClassCastException. В онлайн-тренажере Java вы потренируетесь читать код и понимать, как работает проверка типов во время выполнения.
Пример:
if (obj instanceof String) { System.out.println(((String) obj).length()); }
- Проверка работает только для ссылочных типов.
null instanceof AnyTypeвсегда даётfalse.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Сопоставление: понятия вокруг instanceof
В левой колонке перечислены ключевые термины и понятия, связанные с оператором instanceof, приведением типов и полиморфизмом в Java. В правой колонке даны их краткие определения или характерные следствия. Сопоставьте каждый термин из левой колонки с соответствующим ему определением из правой. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок определений перемешан.
2. Собери проверку перед приведением типа
В этом задании вам предстоит собрать корректную проверку с использованием оператора instanceof и безопасного приведения типа. В коде ниже объявлена переменная родительского типа Animal, которая ссылается на объект Dog. Вам нужно заполнить пропуски, выбрав подходящие элементы из выпадающего списка, чтобы код выполнял проверку типа и вызывал метод bark() у объекта Dog. Обратите внимание на синтаксис оператора instanceof и правильное указание типа при приведении.
Animal animal = new Dog();
if (animal input1S input2S) {
Dog dog = (input3S) animal;
dog.bark();
}3. Что выведет код с instanceof в разных ветках?
Проанализируйте приведенный ниже код на Java. Определите, какие значения будут выведены на экран в результате выполнения программы. Выберите правильную последовательность значений (true/false) для каждого из выводов.
interface I { }
class A { }
class B extends A implements I { }
public class Main {
public static void main(String[] args) {
A a = new B();
I i = new B();
Object o = new B();
A nullA = null;
System.out.println("1: " + (a instanceof I));
System.out.println("2: " + (i instanceof A));
System.out.println("3: " + (o instanceof B));
System.out.println("4: " + (nullA instanceof A));
System.out.println("5: " + (nullA instanceof I));
System.out.println("6: " + (o instanceof I));
}
}4. Исправь ошибку в проверке типа
В данном фрагменте кода на Java допущена ошибка в использовании оператора instanceof. Проверка типа выполнена некорректно, что приводит к неверному приведению типов и потенциальной ошибке во время выполнения программы. Найдите и исправьте строку с ошибкой, чтобы код корректно проверял тип объекта и выполнял безопасное приведение.
public class Main { public static void main(String[] args) { Animal animal = new Dog(); if (animal instanceof Cat) { Dog dog = (Dog) animal; dog.bark(); } }} class Animal {}class Dog extends Animal { void bark() { System.out.println("Woof!"); }}class Cat extends Animal { void meow() { System.out.println("Meow!"); }}5. Отметь все проверки instanceof
Внимательно изучите представленный фрагмент кода на Java. Ваша задача — найти и отметить (кликом) все места, где используется оператор `instanceof`. Оператор `instanceof` применяется для проверки типа объекта во время выполнения программы. Не отмечайте другие операторы (например, сравнения, присваивания) или имена переменных, даже если они находятся рядом с проверкой типа.
public void processObject(Object obj) {
if (obj {{==~|~t1}} null) {
return;
}
if (obj {{instanceof~|~t2}} String) {
String s = (String) obj;
System.out.println("Длина строки: " + s.{{length()~|~t3}});
} else if (obj {{instanceof~|~t4}} Integer) {
Integer i = (Integer) obj;
System.out.println("Число: " + i);
} else if (obj {{instanceof~|~t5}} List) {
List> list = (List>) obj;
System.out.println("Это список");
}
// Проверка в сложном условии
if (obj {{!=~|~t6}} null && obj {{instanceof~|~t7}} Number) {
System.out.println("Это число");
}
// Пример без instanceof
int x = 10;
if (x {{>~|~t8}} 5) {
System.out.println("x больше 5");
}
}6. Заполни пропуски: поведение null и instanceof
В этом задании рассматривается поведение оператора instanceof при проверке переменной, содержащей null. Заполните пропуски в коде так, чтобы программа создала переменную типа Object, присвоила ей null, проверила, является ли эта переменная экземпляром класса String, и вывела результат проверки (который должен быть false). Обратите внимание на синтаксис объявления переменной, ключевое слово null и тип для проверки instanceof.
public class Main {
public static void main(String[] args) {
input1S obj = input2S;
boolean result = obj instanceof input3S;
System.out.println(result);
}
}7. Собери блок: проверка → приведение → использование
Из предложенных строк соберите корректный блок java-кода, который демонстрирует безопасное приведение типов с использованием оператора instanceof. Код должен создавать переменную типа Object, присваивать ей строку, проверять её тип, выполнять приведение и вызывать метод полученного объекта. Одна из строк является лишней и не должна входить в решение.
Object obj = "Hello, World!";if (obj instanceof String) { String str = (String) obj; System.out.println(str.toUpperCase());}System.out.println(obj);String str = (String) obj;