类Field: 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。

A:获得类的成员变量 数组:

  1、getFields(公共类的)

  2、getDeclaredFields(所有类型的)

B:获得类的单个成员变量:

  1、getField (公共类的)

  2、getDeclaredField (所有类型的)

  A.1:获得类的公共成员变量:

         //获取类的字节码文件对象
Class c = Class.forName("zl_Relfect_01.Person"); //获得该对象的公共成员变量
Field[] f = c.getFields();
//遍历
for(Field fie : f){
System.out.println(fie);
}

 

 A.2:获得类的所有成员变量:

         //获取类的字节码文件对象
Class c = Class.forName("zl_Relfect_01.Person");
   //获取该类的所有成员变量
Field[] f = c.getDeclaredFields();
for(Field fie : f){
System.out.println(fie);
}

 B.1:获得单个公共成员变量:

         //获取类的字节码文件对象
Class c = Class.forName("zl_Relfect_01.Person");
//获取单个公共的成员变量
Field f = c.getField("address");
System.out.println(f);

 B.2:获得单个所有类型的成员变量:

         //获取类的字节码文件对象
Class c = Class.forName("zl_Relfect_01.Person");
// 获取单个成员变量(所有类型)
Field f = c.getDeclaredField("name");
System.out.println(f);

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

      //获取类的字节码文件对象
Class c = Class.forName("zl_Relfect_01.Person");
//通过无参构造创建对象
Constructor con = c.getConstructor();
Object obj = con.newInstance(); //获取私有成员变量name,并对它进行赋值
//首先获取私有成员变量name
Field newname = c.getDeclaredField("name");
//成员变量name是私有的,所以得先取消语言访问检查 public void setAccessible(boolean flag)
newname.setAccessible(true);
//set(Object obj,Object value):将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
//给obj里面的newname赋值为张三
newname.set(obj, "张三");
System.out.println(obj);//Person [name=张三, age=0, address=null] //获取默认类型成员变量age,并对它进行赋值
//获取age变量,并赋值
Field newage = c.getDeclaredField("age");
//取消语言访问检查
newage.setAccessible(true);
//给age赋值
newage.set(obj, 13);
System.out.println(obj); //获取公共成员变量address,并对它赋值
//获取address对象,并赋值
Field newaddress = c.getDeclaredField("address");
newaddress.set(obj, "家乡");
System.out.println(obj);

java 27 - 4 反射之 通过反射获取成员变量并使用的更多相关文章

  1. Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用

    一.反射获取成员变量并且使用: 1.获取字节码文件对象:         Class c = Class.forName("cn.itcast_01.Person"); 2.使用无 ...

  2. Android(java)学习笔记50:通过反射获取成员变量和成员方法并且使用

    1. 反射获取成员变量并且使用: (1)获取字节码文件对象:         Class c = Class.forName("cn.itcast_01.Person"); (2) ...

  3. Java反射理解(四)-- 获取成员变量构造函数信息

    Java反射理解(四)-- 获取成员变量构造函数信息 步骤 获取成员变量信息: obj.getClass() 获取类类型对象 成员变量也是对象,java.lang.reflect.Field 类中封装 ...

  4. java反射--获取成员变量信息

    获取成员变量信息 代码及说明: public static void printFieldMessage(Object obj) { //要获取类的信息,首先要获取类的类类型 Class c=obj. ...

  5. Java bean 链式获取成员变量无需判空的工具设计

    Java bean 链式获取成员变量无需判空的工具设计 本篇文章已发布至公众号 Hollis 对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者 ...

  6. java 反射 - 获取成员变量的值.

    通过反射,可以获取所有声明的成员变量(包括所有的),代码如下: package spt.test.src; public class Person { private String name = &q ...

  7. java调用python的惨痛史(无法获取环境变量)

    环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle        事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...

  8. [Java] 继承中,父类被覆盖的成员变量、方法的可访问性

    在 Java 的继承机制里,在子类内部,可以访问父类被覆盖的变量和方法:在子类外部,可以访问父类的被覆盖变量,但是不能访问父类的被覆盖方法. 父类中被覆盖的方法不能在外部被方法,这是出于封装的考虑. ...

  9. Java使用反射来获取成员变量泛型信息

    Java通过指定类对应的Class对象,程序可以获得该类里包括的所有Field,不管该Field使用private修饰,还是使用public修饰.获得了Field对象后,就可以很容易的获得该Field ...

随机推荐

  1. 【Leafletjs】5.L.Control 自定义一个Control

    L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...

  2. Android Content Provider基础

    Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...

  3. 遍历collection

    链接 遍历NSArray 正向遍历 for (id object in array) 反向遍历 for (id object in [array reverseObjectEnumerator]) 如 ...

  4. html 出现的错误

    1.HTML页面为什么设置了UTF-8仍然中文乱码 用记事本写,保存后在网页上运行出现了乱码,换成GB2312能正确显示中文 代码没有问题,问题就出记事本身上. <meta charste=&q ...

  5. APP远程调试及网络自动化测试

    一:优测 腾讯旗下的测试服务 http://utest.qq.com/ 二:云测 http://www.testin.cn/ 三:testbird 1.进入这个网站,注册并且登录 https://dt ...

  6. 【代码笔记】iOS-点击任何处,显示出红色的UIView

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> //头文件 #import "MoreView. ...

  7. Protocol and Delegate协议和代理

    1.什么是协议?  OC协议仿照Java的接口.协议和接口,都是不同类的对象之间一种通信的机制.2.协议的基础语法  单纯的语言描述协议的语法,很难让人理解,主要因为在OC中协议是类对象的通信机制,他 ...

  8. JSON解析方案

    在iOS中,JSON的常见解析方案有4种 第三方框架:JSONKit,SBJson,TouchJSON(性能从左到右,越差) 苹果原生(自带):NSJSONSerialization(性能最好) JS ...

  9. C# 依赖缓存

    使用轮询的方式 数据库: 在VS的命令里面输入 aspnet_regsql.exe -S (local) -U sa -P 123456 -d ERP_SQL -ed 上面这句是用来设置哪个服务器上的 ...

  10. [转]android笔记--Intent和IntentFilter详解

    Intent用于启动Activity, Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介. 使用Intent启动组件的优势1, Intent为组件的启 ...