博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射操作公共成员变量
阅读量:6094 次
发布时间:2019-06-20

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

1.1.1 反射public成员变量(字段)

通过反射运行public变量流程

  1. 通过反射获取该类的字节码对象
    Class clazz = Class.forName("com.heima.Person");
  2. 创建该类对象
    Object p = clazz.newInstance();
  3. 获取该类中需要操作的字段(成员变量)
    getField(String name) --> 方法传入字段的名称.
    注意: 此方法只能获取公共的字段
    Field f = clazz.getField("age");
  4. 通过字段对象中的方法修改属性值
    void set(Object obj, Object value) --> 参数1): 要修改那个对象中的字段, 参数2): 将字段修改为什么值.
    f.set(p, 23);
    1.1.2 案例代码
    package com.itheima_01;

import java.lang.reflect.Field;

/*

  • 通过反射获取成员变量并使用

  • Field[] getFields()

  • Field getField(String name)

  • Field[] getDeclaredFields()

  • Field getDeclaredField(String name)

  • Field:

  • Object get(Object obj)

  • void set(Object obj, Object value)

    */

public class ReflectDemo3 {

public static void main(String[] args) throws ReflectiveOperationException {

//获取学生类的字节码对象

Class clazz = Class.forName("com.itheima_01.Student");

//获取学生类的对象

Object stu = clazz.newInstance();

//Field getField(String name) :根据字段名称获取公共的字段对象

Field f = clazz.getField("age");//获取成员变量对象

//System.out.println(f);

//void set(Object obj, Object value)

f.set(stu,28);//通过成员变量对象,修改指定对为指定的值

//Object get(Object obj)

Object age = f.get(stu);//通过对象获取成员变量的值

System.out.println(age);

System.out.println(stu);

}

private static void method(Class clazz) {

//Field[] getFields() :获取公共的成员变量

Field[] fs = clazz.getFields();

for (int i = 0; i < fs.length; i++) {

System.out.println(fs);

}

System.out.println("----------");

//getDeclaredFields() :获取所有的成员变量

Field[] fs2 = clazz.getDeclaredFields();

for (int i = 0; i < fs2.length; i++) {

System.out.println(fs2);

}

}

}

1.1.3 方法总结             通过反射获取成员变量并使用                       Field[] getFields()              --> 返回该类所有(公共)的字段                     Field getField(String name)      --> 返回指定名称字段                    Field[] getDeclaredFields()      --> 暴力反射获取所有字段(包括私有)                     Field getDeclaredField(String name) --> 暴力反射获取指定名称字段                    ---------------马上讲-----------------              Field:                      Object get(Object obj)          --> Field对象调用, 返回传入对象的具体字段                      void set(Object obj, Object value) -->  Field对象调用                                                        参数1: 要修改的对象                                                        参数2: 将此对象的字段修改为什么值.

转载于:https://blog.51cto.com/13587708/2372988

你可能感兴趣的文章
2015第31周一
查看>>
2015第31周日
查看>>
在使用EF开发时候,遇到 using 语句中使用的类型必须可隐式转换为“System.IDisposable“ 这个问题。...
查看>>
PHP使用DES进行加密和解密
查看>>
Oracle 如何提交手册Cluster Table事务
查看>>
BeagleBone Black第八课板:建立Eclipse编程环境
查看>>
在服务器上用Fiddler抓取HTTPS流量
查看>>
文件类似的推理 -- 超级本征值(super feature)
查看>>
【XCode7+iOS9】http网路连接请求、MKPinAnnotationView自定义图片和BitCode相关错误--备用...
查看>>
各大公司容器云的技术栈对比
查看>>
记一次eclipse无法启动的排查过程
查看>>
【转】jmeter 进行java request测试
查看>>
读书笔记--MapReduce 适用场景 及 常见应用
查看>>
SignalR在Xamarin Android中的使用
查看>>
走过电竞之路的程序员
查看>>
Eclipse和MyEclipse使用技巧--Eclipse中使用Git-让版本管理更简单
查看>>
[转]响应式表格jQuery插件 – Responsive tables
查看>>
8个3D视觉效果的HTML5动画欣赏
查看>>
C#如何在DataGridViewCell中自定义脚本编辑器
查看>>
【linux】crontab定时命令
查看>>