Метод getClass

Модуль 2. Java Core
9 уровень , 5 лекция
Открыта
Метод getClass(), объект класс, знакомство с Reflection - 1

— Привет, Амиго!

А теперь самое интересное. Мы познакомимся с классом Class и немного с Reflection.
Как ты уже, наверное, успел понять, в Java все является объектом. А что нужно для объекта? Что есть у каждого объекта и определяет саму его суть?

— Класс объекта!

— Правильно! Молодец. У каждого объекта есть класс. Но вернемся к объектам. Некоторые объекты полностью содержат какую-то сущность, другие же просто помогают ей управлять.

Ко вторым можно отнести FileOutputStream или Thread. Когда ты создаешь объект Thread, новая нить не создается. Ее создает Java-машина после вызова метода start(). Этот объект просто помогает управлять процессом.

Так же и FileOutputStream: файл хранится на диске и его хранением и доступом к нему управляет ОС. Но мы можем взаимодействовать с ним посредством объектов типа File, при опять-таки помощи Java-машины.

— Да, я это понял уже.

— Так вот, для взаимодействия с классами есть специальный класс и называется он — Class.

— Не трудно было догадаться.

— Ага. Каждый раз, когда Java-машина загружает в память новый класс, она создает объект типа Class, посредством которого можно получить некоторую информацию о загруженном классе.

К каждому классу и объекту привязан такой «объект класса».

Пример Описание
Class clazz = Integer.class;
Получение «объект класса» у класса Integer.
Class clazz = int.class;
Получение «объект класса» у класса int.
Class clazz = "123".getClass();
Получение «объект класса» у объекта типа String.
Class clazz = new Object().getClass();
Получение «объект класса» у объекта типа Object.

— Ух ты, как интересно.

А почему ты пишешь clazz, а не class?

— А ты помнишь, что слово class – это ключевое слово в Java и использовать его для именования переменных нельзя?

— Да, я это знаю, знаю. Только забыл.

— Ты где-нибудь уже использовал объект Class?

— Да, мы использовали его, когда писали свою реализацию метода equals.

— Да, можно сравнить – одинаковые ли у объектов классы, если воспользоваться методом getClass().

— А что можно делать с этим объектом?

— Ну, много чего:

Код на Java Описание
Class s = int.class;
String name = s.getName();
Получить имя класса.
Class s = Class.forName("java.lang.String");
Получить класс по имени.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Сравнить классы у объектов.

— Интересно, но не так круто, как я думал.

— Хочешь, чтобы было круто? Есть еще Reflection. Reflection – это очень круто.

— А что такое Reflection?

Reflection – это способность класса получить информацию о самом себе. В Java есть специальные классы: Field – поле, Method – метод, по аналогии с Class для классов. Т.к. объект типа Class дает возможность получить информацию о классе, то объект типа Field–получить информацию о «поле класса», а Method–о «методе класса». И вот что с ними можно делать:

Код на Java Описание
Class[] interfaces = List.class.getInterfaces();
Получаем список «объектов класса» для интерфейсов класса List
Class parent = String.class.getSuperclass();
Получаем «объект класса» родительского класса для класса String
Method[] methods = List.class.getMethods();
Получаем список методов, которые есть у класса List
String s = String.class.newInstance();
Создаем новый объект класса String
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s);
Получаем метод length у класса String, вызываем его у строки s

— Вау! Вот это реально круто!

— Рад, что тебе понравилось.

12
Задача
Java Core, 9 уровень, 5 лекция
Недоступна
Четные символы
Четные символы
20
Задача
Java Core, 9 уровень, 5 лекция
Недоступна
Считаем слово
Считаем слово
20
Задача
Java Core, 9 уровень, 5 лекция
Недоступна
Выделяем числа
Выделяем числа
12
Задача
Java Core, 9 уровень, 5 лекция
Недоступна
Замена знаков
Замена знаков
12
Задача
Java Core, 9 уровень, 5 лекция
Недоступна
Пунктуация
Пунктуация
Комментарии (14)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Руслан Уровень 48
3 октября 2025
рефлексия вообще пушка!!
Игорь Уровень 112
6 апреля 2025
Если не понятен здесь материал, копируйте код в IntelliJ IDEA, запускайте и System.out.println все покажет. И конечно же для массивов применяем Arrays.toString(...)))) Например Method[] methods = List.class.getMethods(); System.out.println(Arrays.toString(methods)); и получаем кучу методов интерфейса List: [public abstract boolean java.util.List.remove(java.lang.Object), public abstract java.lang.Object java.util.List.remove(int),......
Артем Иевлев Уровень 115
26 ноября 2024
А ведь Class еще и дженерализуется😭
Олег Уровень 111 Expert
30 сентября 2024
Крайний пример кода можно изменить:

import java.lang.reflect.Method;

public class ReflectionExample {
    public static void main(String[] args) throws Exception {
        /* Метод newInstance() в классе Class создаёт новый объект
        с помощью вызова конструктора по умолчанию (без параметров).
        Однако, у класса String нет конструктора без параметров,
        и вызов newInstance() в данном случае
        вызовет исключение InstantiationException.
        Для создания строки можно использовать конструкторы с параметрами
        или вызвать статический метод, такой как valueOf().
        Заменим вызов String.class.newInstance()
        на простое создание строки "Hello, World!" */
        
        String s = "Hello, World!";
        
        // Получаем метод length() у класса String
        Method m = String.class.getMethod("length");
        
        /* Вызываем метод length() для объекта строки s
        Результат приводим к типу int,
        так как метод возвращает целочисленное значение. */
        
        int length = (int) m.invoke(s);
        
        // Выводим длину строки
        System.out.println("Длина строки: " + length);  // Output: Длина строки: 13
    }
}

Андрей Уровень 101 Expert
11 января 2023
— Ты где-нибудь уже использовал объект Class? — Да, мы использовали его, когда писали свою реализацию метода equals. instanceof там использовали
Андрей Уровень 5
25 декабря 2024
Да, instanceof был. Пиздаболы несчастные
Владимир Уровень 109 Expert
11 июня 2022
Амиго, какая-то токсичная скотина: "Да, я это понял уже", "Не трудно было догадаться", "Интересно, но не так круто, как я думал".
Артем Уровень 48
5 марта 2025
Подобные мысли и меня посещают когда читаю реплики Амиго)))
Андрей Пазюк Уровень 117 Expert
28 мая 2022
Надеюсь в работе эта штука не применяется, иначе я уйду "программировать" на HTML.
Сергей Уровень 111 Expert
17 июля 2022
Не встречалось больше это всё?:)
Андрей Пазюк Уровень 117 Expert
17 июля 2022
Сергей, было. Вещь действительно полезная, к тому же уже давно ее изучил и не парюсь больше.
Евгений Уровень 44
23 августа 2022
а где изучил?) Скинь ссыль)
Михаил Уровень 102 Expert
30 августа 2022
на JR скорее всего ))
Александр Уровень 39 Expert
24 декабря 2023
Присоединяюсь к поискам.