博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础--反射之Field
阅读量:5874 次
发布时间:2019-06-19

本文共 2864 字,大约阅读时间需要 9 分钟。

hot3.png

一、Field

(1)Field

/**     * Field: 分装了字段的信息     * 1. 获取字段     * 1.1 Field[] fields = clazz.getDeclaredFields();     * 1.2 Field field = clazz.getDeclaredField("name");     *     * 2. 获取指定对象的指定字段的值     * public Object get(Object obj)     *     obj 为字段所在对象     * 3. 设置指定对象的指定字段的值     * public void set(Object obj, Object value)     *     obj 字段所在对象     *     value 要设置的值     */    @Test    public void test10() throws Exception {        Class clazz = Class.forName("com.wang.reflection.Person");        //1.获取字段        //1.1 获取Field的数组        Field[] fields = clazz.getDeclaredFields();        for(Field field : fields) {            System.out.println("1.1 " + field);        }        //1.2 获取指定名字的Field        Field field = clazz.getDeclaredField("name");        System.out.println("1.2 " + field.getName());        //2.获取指定对象的Field的值        Person person = new Person("AAA", 22);        Object val = field.get(person);        System.out.println("2 " + val);        //3. 设置指定对象的Field值        field.set(person, "BBB");        System.out.println("3 " + person.getName());        //4. 若该字段是私有的,需要调用        Field field2 = clazz.getDeclaredField("age");        field2.setAccessible(true);        System.out.println("4 " + field2.get(person));    }

结果输出:

(2)为私有属性赋值

@Test    public void test11() throws Exception {        String className = "com.wang.reflection.Student";        String fieldName = "age";        Object val = 20;        //创建className所对应的对象,并为其fieldName赋值为val        Object obj = null;        Class clazz = Class.forName(className);        Field field = null;        for(Class clazz2 = clazz; clazz2 != Object.class; clazz2 = clazz2.getSuperclass()) {            try {                field = clazz2.getDeclaredField(fieldName);            } catch (Exception e) {}        }        obj = clazz.newInstance();        field.setAccessible(true);        field.set(obj, val);        Student stu = (Student)obj;        System.out.println(stu.getAge());    }

二、Constructor

/**     * Constructor: 构造器     */    @Test    public void test12() throws Exception {        String className = "com.wang.reflection.Person";        Class clazz = Class.forName(className);        //1. 获取构造器对象        //1.1 获取所有构造器        Constructor
[] constructors = (Constructor
[]) Class.forName(className).getConstructors(); for(Constructor
cons : constructors) { System.out.println("1.1 " + cons); } //1.2 获取指定的构造器 Constructor
constructor = clazz.getConstructor(String.class,Integer.class); System.out.println("1.2 " + constructor); //2. 调用构造器的newInstance方法创建对象 Object obj = constructor.newInstance("AAA", 18); }

输出:

 

1. Java基础--反射之Class类    

2. Java基础--反射之Method    

3. Java基础--反射之Field        ----当前----

 

转载于:https://my.oschina.net/daowuming/blog/703605

你可能感兴趣的文章
BZOJ1061 [NOI2008]志愿者招募
查看>>
第一次作业:深入源码分析进程模型
查看>>
Pandas 基础(9) - 组合方法 merge
查看>>
初学shell,今天遇到由wget下载到本地的网页源代码的乱码问题,无聊的写了一个转码的脚本...
查看>>
磁盘管理常用命令
查看>>
Algs4-2.3.25切换到插入排序的试验
查看>>
Emgucv中快捷的显示图像直方图
查看>>
黑客和骇客
查看>>
Hausaufgabe--Python 06
查看>>
Django模板自定义标签和过滤器,模板继承(extend),Django的模型层
查看>>
Sql Server 列转行 Pivot使用
查看>>
socket和http间的区别
查看>>
error笔记
查看>>
C++——流类库和输入/输出
查看>>
Windows下动态库的制作与使用
查看>>
STL容器简介
查看>>
会写"helloworld",不等于入门
查看>>
element-ui table多选CheckBox参数解析
查看>>
重置mysql的root用户密码
查看>>
隔离级别
查看>>