反射_Class对象功能_获取Field

一、获取功能:

​1.获取成员变量们

  • ​ Field[] getFields() :获取所有public修饰的成员变量
  • ​ Field getField(String
    name):获取指定名称的public修饰的成员变量
  • ​ Field[] getDeclaredFields()
    :获取所有的成员变量,不考虑修饰符
  • ​ Field getDeclaredField(String
    name):获取指定名称的修饰的成员变量,不考虑修饰符

2.获取构造方法们

  • ​ Constructor<?>[] getConstructors()
  • ​ Constructor getConstructor(类<?>…
    parameterTypes)
  • ​ Constructor<?>[]
    getDeclaredConstructors()
  • ​ Constructor
    getDeclaredConstructor(类<?>… parameterTypes)

3.获取成员方法们

  • ​ Method[] getMethods()
  • ​ Method getMethod(String name,类<?>…
    parameterTypes)
  • ​ Method[] getDeclaredMethods()
  • ​ Method getDeclaredMethod(String
    name,类<?>… parameterTypes)

4.获取类名

  • ​ String getName
二、Field:成员变量

操作:

  • ​ 1.设置值

    ​ void set(Object obj,Object value)

  • ​ 2.获取值

    ​ get(Object obj)

  • ​ 3.忽略访问权限修饰符的安全检查

    ​ setAccessible(true):暴力反射

package cn.reflect;

import cn.domain.Person;

import java.lang.reflect.Field;

public class ReflectDemo2 {
    /**
     *Class对象功能:

     ​      *获取功能:

     ​       1.获取成员变量们

     ​           *Field[]  getFields()

     ​           *Field    getField(String name)

     ​           *Field[]  getDeclaredFields()

     ​           *Field    getDeclaredField(String name)

     ​       2.获取构造方法们

     ​             *Constructor<?>[]   getConstructors()

     ​             *Constructor<T>     getConstructor(类<?>...   parameterTypes)

     ​             *Constructor<?>[]   getDeclaredConstructors()

     ​             *Constructor<T>     getDeclaredConstructor(类<?>...   parameterTypes)

     ​       3.获取成员方法们

     ​             *Method[]    getMethods()

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

     ​             *Method[]    getDeclaredMethods()

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

     ​      4.获取类名

     ​             *String getName()
     */
    public static void main(String[] args) throws Exception {
        //0.获取Person的Class对象
        Class personClass = Person.class;

        /*
         1.获取成员变量们

     ​         *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);           //public java.lang.String cn.domain.Person.a
        }
        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);  //null
        //设置a的值
        a.set(p,"张三");
        System.out.println(p);  //Person{name='null', age=0, a='张三', b='null', c='null', d='null'}

        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); //null
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值