反射概述和反射获取字节码Class对象的三种方式

反射:框架设计的灵魂

框架:半成品软件。可以在框架的基础上进行软件开发,简化变法
反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1.可以在程序运行的过程中操作这些对象。
2.可以解耦,投稿程序的可扩展性
image

Class对象功能:
获取功能:
1.获取成员变量们
Field[] getFields()获取所有public修饰的成员变量
Field getField(String name)

Field[] getDecalredFields()
Field getDeclaredField(String name)

2.获取构造方法们
Constructor[] getConstructors() Constructor getConstructor(类... parameterTypes)

Constructor getDeclareConstructor(类... paramterTypes) Constructor[] getDeclaredConstructors()获取所有的成员变量不考虑修饰符

3.获取成员方法们
Method[] getMethod()
Method getMethod(String name,类<?>... paramterTypes)

Method[] getDeclaredMethods()
Method getDeclaredMethod(String name,类<?>... paramterTypes)

4.获取类名
String getName()

Field:成员变量
操作:
1.设置值
void set(Object obj , Object value)
2.获取值
get(Object obj)
3.忽略访问权限修饰符的安全检查
setAccessible(true)暴力反射

package com.yang.reflect;

import com.yang.exercises.Person;

import java.lang.reflect.Field;

public class ReflectStudy01 {

    public static void main(String[] args) throws Exception {
        //获取Person的class对象
        Class<Person> personClass = Person.class;
        /**
         * 1.获取成员变量们
         * Field[] getFields()
         * Field getField(String name)
         *
         * Field[] getDecalredFields()
         * Field getDeclaredField(String name)
         */
        //Field[] getFields()
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        //Field getField(String name)
        Field a = personClass.getField("a");

        //获取成员变量a的值
        Person p = new Person();
        Object value = a.get(p);
        System.out.println(value);
        //设置a的值
        a.set(p,"啦啦啦a");
        System.out.println(p);

        //Field[] getDecalredFields()
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }
        //Field getDeclaredField(String name)
        Field a1 = personClass.getDeclaredField("a");
        Object value2 = a1.get(p);
        System.out.println(value2);
    }
}
posted @   我滴妈老弟  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示