首页 > 编程语言 > 详细

JavaSE:反射机制 - Field类

时间:2021-06-16 14:43:14      阅读:16      评论:0      收藏:0      [点我收藏+]

1.  基本概念

    java.lang.reflect.Field类:主要用于描述获取到的单个成员变量信息

 

2.  Class类中,和Field有关的常用方法

方法声明 功能介绍
Field getDeclaredField(String name) 用于获取此Class对象所表示类中参数指定的单个成员变量信息
Field[] getDeclaredField() 用于获取此Class对象所表示类中所有成员变量信息

3.  Field类的常用方法

Object get(Object obj) 获取参数对象obj中,此Field对象所表示成员变量的数值
void set(Object obj, Object value) 将参数对象obj中,此Field对象表示成员变量的数值,修改为参数value的数值
void setAccessible(boolean flag) 当实参传递true时,则反射对象在使用时,应该取消java语言访问调查
int getModifiers() 获取成员变量的访问修饰符
Class<?> getType() 获取成员变量的数据类型
String getName() 获取成员变量的名称

 

4.  代码示例

class PersonFieldTest {

    main() throws Exception {

    

      //  1.  使用原始方式,构造对象以及成员变量的数值,并打印

      Person p1 = new Person("zhangfei",30);

      //  println("获取到的成员变量数值为:" + p1.name);  //  zhangfei 

 

      //  2.  使用反射机制来构造对象,以及获取成员变量的数值,并打印

      //  2.1   获取Class对象

      Class c1 = Class.forName("com.lagou.task20.Person");

      //  2.2  根据Class对象,获取对应的有参构造方法

      Constructor constructor = c1.getConstructor(String.class, int.class);

      //  2.3  使用有参构造方法,得到Person类型的对象

      Object object = constructor.newInstance("zhangfei",30);

      //  2.4  根据Class对象,获取对应的成员变量信息

      Field field = c1.getDeclaredField("name");

      //  设置Java语言访问检查的取消  暴力反射

      field.setAccessible(true);

      //  2.5  使用Person类型的对象,来获取成员变量的数值,并打印

      //  获取对象object中,名字为field成员变量的数值,也就是成员变量name的数值

      print("获取到的成员变量数值为:" + field.get(object) );  //  zhangfei

 

      //  3.  使用原始方式,修改指定对象中,成员变量的数值后,再次打印

      //  p1.name = "guanyu";

      //  print("修改后成员变量的数值为:" + p1.name);  //  guanyu

 

      //  4.  使用反射机制,修改指定对象中成员变量的数值后,再次打印

      //  表示修改对象object中,名字为field成员变量的数值为guanyu,也就是成员变量name的数值为guanyu

      field.set(object,"guanyu");

      println("修改后成员变量的数值为:" + field.get(object) );  //  guanyu

 

      //  5.  获取Class对象对应类中,所有的成员变量

      Field[] declaredFields = c1.getDeclaredFields();

      for (Field ft : declearedFields) {

        print("获取到的访问修饰符为:" + ft.getModifiers() );

        print("获取到的数据类型为:" + ft.getType() );

        print("获取到的成员变量名称是:" + ft.getName() );      

      }

    }

}

JavaSE:反射机制 - Field类

原文:https://www.cnblogs.com/JasperZhao/p/14888721.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!