2025-07-06T12:21:07.png

所以我们通过反射创建一个对象

2025-07-06T12:42:50.png

-访问字段

之后通过这个获取字段(这个字段是没有值的哦,辅助下面使用)
2025-07-06T12:44:58.png
设置访问权限,因为是private
2025-07-06T12:46:19.png
使用我们预先准备的这个params1对象来获取get(class)方法,get里面参数为需要获取的实体对象,也就是我们之前想获取的student对象,这样我们就获取到了student的name了!
2025-07-06T12:52:50.png
set方法重新设置值 .set(操作对象,需要赋值的数据)
2025-07-06T13:18:52.png

-访问方法

看到这个使用方法是不行的,因为设置了private
2025-07-06T12:55:38.png

使用Method定义方法,getDeclaredMethod获取方法
2025-07-06T12:57:33.png
如果方法有参数,那么就对于后面加参数类型(类型是修饰参数的类.class)
2025-07-06T12:59:51.png
回来,同样的方法也需要设置访问权限,如果是private,然后使用我们准备好的对象student_reflect_method来调用,使用invoke(需要使用方法的对象,params1,params2...),没有就不写,调用函数,后面传入需要实现的对象student,如果方法有参数就写

invoke意思为实施,调用

2025-07-06T13:04:27.png

可以看到函数确实被调用了,再看看带参数的如下
2025-07-06T13:11:47.png

性能优化

如果直接调用方法那么速度最快
反射调用方法,执行速度最慢
反射的方法需要关闭方法权限检测,速度会提升,但是没普通的快
比如调用如下反射方法priint_name,关闭也就是setAccessible(true)以后,速度提升
// Method priint_name=clazz.getDeclaredMethod("priint_name_pa",String.class);
// priint_name.setAccessible(true);
// priint_name.invoke(s,"测");