反射-Class对象功能概述以及获取Field

Class对象功能概述

1、获取成员变量们:

Field[] getFields():获取所有public修饰的成员变量

Field getField(String name):获取指定名称的 public修饰的成员变量

 

Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符

Field getDeclaredField(String name)

Field:成员变量

  操作:

  1、设置值

    void set(Object obj,Object value)

  2、获取值

    get(Object obj)

  3、忽略访问权限修饰符的安全检查

    setAccessible(true):暴力反射

 2、获取构造方法们:

Constructor<?>[] getConstructors()

Constructor<T> getConstructor(Class<?>... parameterTypes)

 

Constructor<?>[] getDeclaredConstructors()

Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)

Constructor构造方法

创建对象:

  T newInstance(Object... initargs)

  如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

忽略访问权限修饰符的安全检查 setAccessible(true):暴力反射

3、获取成员方法们:

Method[] getMethods()

Method getMethod(String name, Class<?>... parameterTypes)

 

Method[] getDeclaredMethods()

Method getDeclaredMethod(String name, Class<?>... parameterTypes)

Method :方法对象:

  执行方法:

    Object invoke(Object obj,Object... args)

  获取方法名称:

    String getName:获取方法名

 4、获取类名:

 String getName()

 

Class对象功能-获取Field

 Field[] getFields() :获取所有public修饰的成员变量

 Field getField(String name):获取指定名称的public修饰的成员变量

 

 Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符

 ​Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符

操作:

  设置值:

​     void set(Object obj,Object value)

  获取值:

​     get(Object obj)

  忽略访问权限修饰符的安全检查:

​     setAccessible(true):暴力反射

复制代码
public class Person {
    private String name;
    private int age;

    public String a;
    protected String b;
    String c;
    private String d;

    public Person() {
    }

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", d='" + d + '\'' +
                '}';
    }

    public String getD() {
        return d;
    }

    public void setD(String d) {
        this.d = d;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }
}
复制代码
复制代码
public class demo02 {
    public static void main(String[] args) throws Exception {
/*
1、获取成员变量们:
Field[] getFields():获取所有public修饰的成员变量
Field getField(String name):获取指定名称的 public修饰的成员变量
Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
Field:成员变量
  操作:
  1、设置值
    void set(Object obj,Object value)
  2、获取值
    get(Object obj)
  3、忽略访问权限修饰符的安全检查
    setAccessible(true):暴力反射
*/
        //0.获取Person的Class对象
        Class<Person> personClass = Person.class;
        //1.Field[] getFields():获取所有public修饰的成员变量
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("============");
        //2.Field getField(String name):获取指定名称的 public修饰的成员变量
        Field a = personClass.getDeclaredField("a");
        //创建对象
        Person p = new Person();
        //获取值
        Object value = a.get(p);
        //修改值
        a.set(p,"张三");
        System.out.println(p);
        System.out.println("=============");
        //3.Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }
        //4.Field getDeclaredField(String name):获取指定名称的 不考虑修饰符
        Field d = personClass.getDeclaredField("d");
        //忽略访问权限修饰符的安全检查
        d.setAccessible(true);
        Object value2 = d.get(p);
        d.set(p,"小强");
        System.out.println(p);
    }
}
复制代码

运行结果:

 

posted @   monkey大佬  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示