рефлексия

Рефлексия в Java — это механизм, который позволяет программе анализировать и изменять свою структуру и поведение во время выполнения. С помощью рефлексии можно получать информацию о классах, методах, полях и конструкторах, а также вызывать методы и изменять значения полей, даже если они являются приватными. Основные возможности рефлексии:

Получение информации о классах: С помощью рефлексии можно получить информацию о классе, его методах, полях и конструкторах. Например, можно узнать, какие методы объявлены в классе, какие параметры они принимают и какой тип возвращают.

Динамическое создание объектов: Рефлексия позволяет создавать экземпляры классов во время выполнения, используя конструкторы, даже если тип класса известен только в момент выполнения.

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

Изменение полей: Рефлексия позволяет изменять значения полей объектов, даже если они являются приватными. Это может быть полезно для тестирования или в ситуациях, когда необходимо обойти ограничения доступа.

//вот как мы можем использовать класс, и даже приватные поля с помощью рефлексии

        Person person = new Person("ddd",25,"77777");
        System.out.println(person.getClass().getSimpleName());
        Field[] fields = person.getClass().getDeclaredFields();
        for (Field field:fields){
            System.out.println(field.getName());
        }
        Method[] methods = person.getClass().getDeclaredMethods();
        for (Method method:methods){
            System.out.println(method.getName());
            method.invoke(person);
        }

        Field nameField = person.getClass().getDeclaredField("name");
        //создаём возможность получать приватные поля через рефлексию
        nameField.setAccessible(true);
        System.out.println(nameField.get(person));







public class Person {
    final private String name;
    final int age;
    final String phone;

    Person(String name, int age, String phone){
        this.name = name;
        this.age=age;
        this.phone=phone;
    }

    void display(){
        System.out.println(name+age+phone);
    }
}






короткие примеры: https://gitlab.com/synergy9980417/razdel2/4_1-2 https://gitlab.com/synergy9980417/razdel2/4_3