反射概述和反射获取字节码Class对象的三种方式
反射:框架设计的灵魂
框架:半成品软件。可以在框架的基础上进行软件开发,简化变法
反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1.可以在程序运行的过程中操作这些对象。
2.可以解耦,投稿程序的可扩展性
Class对象功能:
获取功能:
1.获取成员变量们
Field[] getFields()获取所有public修饰的成员变量
Field getField(String name)
Field[] getDecalredFields()
Field getDeclaredField(String name)
2.获取构造方法们
Constructor[] getConstructors()
Constructor
Constructor
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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)