关于Java反射机制中的Field简单尝试与示例以及说明
来源:互联网 发布:mac 查看系统运行程序 编辑:程序博客网 时间:2024/05/16 10:00
大家好!这篇文章也是关于反射机制中的问题,具体是关于Field(字段)的一些简单问题,写的不足之处,还请大家多多指教。同时,小芳还想再次说明,文章针对于对Java语言有一定基础的小伙伴!请见谅!
首先,写一个普通的pojo,注意里面成员的修饰符,有使用private和public修饰的成员
package com.mec.about_reflection;public class PersonClass { //注意name前面有public修饰 public String name; //注意这两个成员前有private修饰 private int age; private String sex; public PersonClass() { } public PersonClass(String name, int age, String sex) { super(); this.setName(name); this.setAge(age); this.setSex(sex); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "PersonClass [name=" + name + ", age=" + age + ", sex=" + sex + "]"; }}
接下来,我在main()函数获取上面的类的字段成员,代码如下:
package com.mec.about_reflection.field;import java.lang.reflect.Field;import com.mec.about_reflection.PersonClass;public class AboutField { public static void main(String[] args) throws NoSuchFieldException, SecurityException { //通过反射机制获取想要获得字段成员的这个类 Object object = new PersonClass(); Class clazz = object.getClass(); //取出这个类的字段成员,注意getDeclaredFields()方法获取的还包括这个类中用private修饰的字段成员,而且获取得一般都是数组 Field[] fields = clazz.getDeclaredFields(); //遍历这个类中的所有字段成员,并输出 for(Field field : fields) { System.out.println("字段成员:" + field.getName()); //输出结果为: 字段成员:name 字段成员:age 字段成员:sex } //获取这个类中的指定字段成员,此时获取的为私有成员(用private修饰) Field fieldOne = clazz.getDeclaredField("age"); System.out.println("获取指定对象成员名称:" + fieldOne.getName()); //输出结果:获取指定对象成员名称:age //因为这个类的‘age’成员是被private修饰,所以设置它的可见性 fieldOne.setAccessible(true); //给该类创建一个对象,并传参数 PersonClass personClass = new PersonClass("芳芳",108,"女"); try { //通过这个类的对象获取指定字段成员的值,注意此时获取的是age的值 Object objectOne = fieldOne.get(personClass); System.out.println("获取指定对象字段‘age’的field的值:" + objectOne); //输出结果:获取指定对象字段‘age’的field的值:108 //设置这个成员的值,这里注意这个方法的参数,第一个参数是该类一个对象 fieldOne.set(personClass, 88); //对于私有成员,不能直接通过点来获取它的输出值,在这里可以用get方法输出,对于public修饰的成员可以直接通过点来输出它的值 System.out.println("设定指定对象字段‘age’的field的值:" + personClass.getAge()); //输出结果为:设定指定对象字段‘age’的field的值:88 //System.exit(0);这一行是为了避免一串大写的红色的错误而写的,今天在这句话之后我也写了输出,但是都没有再输出,它有阻断后续程序执行的作用(我猜测) //获取公共字段成员属性(用public修饰) Field fieldTwo = clazz.getDeclaredField("name"); System.out.println("输出fieldTwo:" + fieldTwo); //输出结果:输出fieldTwo:public java.lang.String com.mec.about_reflection.PersonClass.name System.out.println("获取指定名称的field成员:" + fieldTwo.getName()); //输出结果:获取指定名称的field成员:name //给这个类创建一个实例 PersonClass personClassTwo = new PersonClass("远远",22,"男"); //获取此实例中指定名称的字段成员的值 Object objectTwo = fieldTwo.get(personClassTwo); System.out.println("得到指定对象的‘name’的field的值:" + objectTwo); //输出结果:得到指定对象的‘name’的field的值:远远 //设置这个成员中指定字段成员的值 fieldTwo.set(personClassTwo, "静静"); System.out.println("设定含有public修饰的成员‘name’:" + personClassTwo.name); //输出结果:设定含有public修饰的成员‘name’:静静 } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }}
看完了代码,在这里我主要还想总结两点:
1.对于一个类的私有字段成员我们也可以获取它的值,例如小芳的这篇文章中的age成员,它是由private修饰的,但是我们依旧可以对它进行获取和更改,做这些的前提是对这个field设置setAccessible()方法,而且,在获取这个成员的值时,不能直接用对象点方法(object.field),而是要用它的get方法。而对于一个public修饰的字段成员,无需设置setAccessible()方法就可对其进行获取与更改,在获取值时也可以直接使用对象点方法来获取;
2.注意前后逻辑关系,自行体会。
好的,谢谢你看到这里!晚安!
你要去相信,没有到不了的明天!
阅读全文
0 0
- 关于Java反射机制中的Field简单尝试与示例以及说明
- 浅谈Java中的反射机制以及Class、Constructor、Field、Method简单框架原理
- Java反射机制简单示例
- 关于java反射的简单尝试
- Java 反射机制[Field反射]
- Java 反射机制(包括组成、结构、示例说明等内容)
- JAVA 反射机制示例
- JAVA反射机制示例
- Java--反射机制示例
- Java 反射机制 示例
- 简单介绍java反射机制中Annotation(注解)与Method的程序示例
- 关于java中的反射机制理解!
- 关于Field反射的简单理解
- Java反射机制--Class,Field,Method,Constructor
- java反射简单示例
- java反射机制的简单示例(android中)
- Java进阶(极客)——反射机制(二)Field 对象的机制与实现
- JAVA基础--JAVA中的反射机制说明
- 后端处理前端跨域请求
- chm页面无法显示
- matlab、1
- Hibernate之缓存详解
- The Best Path ----HDU
- 关于Java反射机制中的Field简单尝试与示例以及说明
- 解决Spring中singleton的Bean依赖于prototype的Bean的问题
- 算法期中——合并二叉树
- Android Studio提升开发效率小技巧
- jQuery基础
- Python time模块
- 数据结构-位图(可对海量数据进行处理)
- php.ini配置
- Oracle数据库对象的逻辑、物理、内存结构