反射 && 操作对象

反射 && 操作对象

(一)创建对象:

调用Class类的newInstance()方法(本质上是调用公共无参的构造方法)来创建对象

(二)获取对象:

调用Constructor类中的newInstance(实参列表)方法来获取一个对象。

(三)赋值:

借助Filed对象的get()、set()方法可以对成员变量进行赋值。

(四)运行:

借助Method对象的invoke()方法可以运行成员方法

Object student = clazz.newInstance();
//拿到对象以后,如何为其成员变量赋值呢?
//借助Filed对象
Field name = clazz.getDeclaredField(“name”);
//默认情况下,反射会照顾你的java的权限修饰符
//其实,也可以暴力修改
name.setAccessible(true);
name.set(student, “老刘”);
Field age = clazz.getDeclaredField(“age”);
age.set(student, 25);
System.out.println(student);

Class studentClass = Student.class;
1.获取构造方法
Constructor declaredConstructor =studentClass.getDeclaredConstructor(String.class);
2.创建对象
Student student = declaredConstructor.newInstance(“张三”);
3.根据方法名(你已知它的名字叫 print 无参)获取方法对象
Method print = studentClass.getDeclaredMethod(“print”, null);
//默认情况下,反射也会照顾到Java的权限修饰符
//可以通过设置来暴力访问
print.setAccessible(true);
//4.通过Method对象执行方法
Object invoke = print.invoke(student, null);
System.out.println(invoke);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用反射来获取对象操作属性。下面是一个示例代码,演示了如何使用反射来获取类的实例并操作其属性: ```java import java.lang.reflect.Field; public class ReflectionExample { public static void main(String[] args) { // 创建一个对象 MyClass obj = new MyClass(); // 获取对象的类 Class<?> objClass = obj.getClass(); try { // 获取属性 Field field = objClass.getDeclaredField("myField"); // 打开访问权限 field.setAccessible(true); // 获取属性的值 Object value = field.get(obj); System.out.println("原始值:" + value); // 设置属性的值 field.set(obj, "新的值"); // 再次获取属性的值 value = field.get(obj); System.out.println("修改后的值:" + value); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } } class MyClass { private String myField = "初始值"; } ``` 在上面的示例代码中,我们首先创建了一个 MyClass 的对象 obj。然后通过 obj.getClass() 方法获取了 obj 对象的类,即 MyClass 类的 Class 对象 objClass。接下来,使用 objClass.getDeclaredField("myField") 方法获取了名为 myField 的私有字段。为了能够访问私有字段,我们通过 field.setAccessible(true) 打开了访问权限。然后,通过 field.get(obj) 方法获取了 myField 的原始值,并打印输出。接着,使用 field.set(obj, "新的值") 方法设置了 myField 的新值。最后,再次使用 field.get(obj) 方法获取 myField 的新值,并打印输出。 需要注意的是,反射操作可能会影响代码的性能和可读性,因此应该谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值