java中的反射api

发布于:2025-02-10 ⋅ 阅读:(69) ⋅ 点赞:(0)

1. 调用无参数构造器得到一个类的对象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 定位无参构造器对象
    Constructor constructor = c.getDeclaredConstructor();
    // 暴力打开私有构造器的访问权限(如果是私有构造器、private 就可以使用setAccessible暴力打开)
    constructor.setAccessible(true);
    // 通过无参数构造器初始化对象返回
    Person person = (Person) constructor.newInstance();
    System.out.println(person);
}

 2. 调用有参数构造器得到一个类的对象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 定位有参构造器对象
    Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class, String.class);
    // 暴力打开私有构造器的访问权限(如果是私有构造器、private 就可以使用setAccessible暴力打开)
    // constructor.setAccessible(true);
    // 通过无参数构造器初始化对象返回
    Person person = (Person) constructor.newInstance("WFT", 18, "1.88");
    System.out.println(person);
}

3. 获取全部的成员变量

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取全部声明的成员变量对象
    Field[] fields = c.getDeclaredFields();
    for (Field field : fields) {
        System.out.println(field.getName() + "-->>" + field.getType());
    }
}

4. 获取某个成员变量 并为其赋值

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取全部声明的成员变量对象
    Field nameField = c.getDeclaredField("name");
    System.out.println(nameField.getName() + "--->>" + nameField.getType());
    Person person = new Person();
    nameField.setAccessible(true); // 因为是私有属性 采用暴力反射!
    /**
     * 参数1:被赋值的对象
     * 参数2:该成员变量的值
     */
    nameField.set(person, "王大锤");
    System.out.println(person);
    /**
     * 获取改成员变量的值
     */
    String name = nameField.get(person) + "";
    System.out.println(name);
}

5. 获取所有的methods方法

public static void main(String[] args) {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取所有的方法
    Method[] methods = c.getDeclaredMethods();
    // 遍历看一下
    for (Method method : methods) {
        // 方法名称 参数个数 返回值类型
        System.out.println(method.getName() + "->" + method.getParameterCount() + "->" + method.getReturnType());
    }
}

6.  获取某个methods方法并执行

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取setName方法
    Method setName = c.getDeclaredMethod("setName", String.class);
    // 调用方法
    Person person = new Person();
    Object o = setName.invoke(person, "WFT"); // 如果方法没有返回值  返回值为null
    System.out.println(o);
    System.out.println(person);
}

网站公告

今日签到

点亮在社区的每一天
去签到