Class对象功能概述以及获取Field方法

Class对象功能概述

获取功能:
​1.获取成员变量们

​   Field[] getFields()

​   Field getField(String name)

​   Field[] getDeclaredFields()

​   Field getDeclaredField(String name)

2.获取构造方法们

​   Constructor<?>[] getConstructors()

​   Constructor<T> getConstructor(类<?>… parameterTypes)

   Constructor<T> getDeclaredConstructor(类<?>… parameterTypes)

​   Constructor<?>[] getDeclaredConstructors()
3.获取成员方法们

​   Method[] getMethods()

​   Method getMethod(String name,类<?>…parameterTypes)

​   Method[] getDeclaredMethods()

​   Method getDeclaredMethod(String name,类<?>… parameterTypes)

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;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", 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 Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
复制代码

 

复制代码
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        //1.获取Person类的Class对象
        Class personClass = Person.class;
        /*
          Field[] getFields() :获取所有public修饰的成员变量
     ​   Field getField(String name):获取指定名称的public修饰的成员变量
     ​   Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
     ​   Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符
         */
        //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.getField("a");
        //获取成员变量a的值
        Person p = new Person();
        Object value = a.get(p);
        System.out.println(value);
        //设置a的值
        a.set(p,"张三");
        System.out.println(p);
        System.out.println("===============");
        //Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }
        //Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符
        Field d = personClass.getDeclaredField("d");
        //忽略访问权限修饰符的安全检查
        d.setAccessible(true);//暴力反射
        Object value2 = d.get(p);
        System.out.println(value2);
    }
复制代码

运行结果:

 

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