反射——调用类中的指定属性

本文介绍了Java反射机制中如何通过Field类来访问和修改类的公有及私有属性。通过getField()获取公有属性,getDeclaredField()获取所有属性,包括私有。在访问私有属性前,需使用setAccessible(true)解除封装。示例代码展示了如何设置和获取属性值。
摘要由CSDN通过智能技术生成

通过反射调用指定属性

  • 在反射机制中,可以直接通过 Field 类操作类中的属性,通过 Field 类提供的 set() 和 get() 方法就可以完成设置和取得属性内容的操作。

    • 返回此 Class 对象表示的类或接口的指定 public(公有的)Field:

      public Field getField(String name)
      
    • 返回此 Class 对象表示的类或接口的指定的 Field:

      public Field getDeclaredField(String name)
      
  • 在 Field 中:

    • 取得指定对象 obj 上此 Field 的属性内容

      public Object get(Object obj)
      
    • 设置指定对象 obj 上此 Field 的属性内容

      public void set(Object obj,Object value)
      
  • 注意:在此类属性都设置为 private 的前提下,在使用 set() 和 get() 方法时,首先要使用 Field 类中的 setAccessible(true) 方法将需要操作的属性设置为可以被外部访问。

    • 访问私有属性时,让这个属性可见

      public void setAccessible(true)
      

调用公有属性

Class cla = Class.forName("com.aze.reflection.Student");
//反射创建一个对象
Constructor con = cla.getConstructor();
Student stu = (Student) con.newInstance();
//获取名为 school 的公有属性
Field fie = cla.getField("school");
//设置属性的值
fie.set(stu,"一中");
//获取属性的值
String sch = (String) fie.get(stu);
System.out.println(sch);

调用所有属性(可以调用私有的)

  • 获取到指定的私有属性时,需要解除私有的封装。
Class cla = Class.forName("com.aze.reflection.Student");
//反射创建对象
Constructor con = cla.getConstructor();
Student stu = (Student) con.newInstance();
//获取名为 privateField 的所有的属性(包括共有私有)
Field fie = cla.getDeclaredField("privateFiled");
//解除私有封装
fie.setAccessible(true);
//设置属性的值
fie.set(stu,"123abc");
//获取属性的值
String s = (String) fie.get(stu);
System.out.println(s);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值