2019独角兽企业重金招聘Python工程师标准>>>

首先必须明一点 Field类主要是用来辅助获取和操作类的属性的

1.怎么通过反射获取类的属性

先来看JDK提供的方法有如下几种:

a)Class.getDeclaredField(String name);

     返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段

     b)Class.getDeclaredFields();

      返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段

    c)Class.getField(String name);

       返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段

    d)Class.getField();

返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段

来一个例子来说明一下 :

实体类:

 import java.util.Date;
/*** @ClassName: Student* @Description: 学生实体* @author JoseanLuo  * @date 2014-3-18 下午5:17:35* @version V1.0 */
public class Student
{private Long id;private String name;private Date createdate;private String no;public String nickname;
public Long getId()
{return id;
}
public void setId(Long id)
{this.id = id;
}
public String getName()
{return name;
}
public void setName(String name)
{this.name = name;
}
public Date getCreatedate()
{return createdate;
}
public void setCreatedate(Date createdate)
{this.createdate = createdate;
}
public String getNo()
{return no;
}
public void setNo(String no)
{this.no = no;
}
public String getNickname()
{return nickname;
}
public void setNickname(String nickname)
{this.nickname = nickname;
}}

测试类:

import java.lang.reflect.Field;
import java.util.Date;
/*** @ClassName: ReflectFieldTest* @Description: 反射Field测试。* @author JoseanLuo  * @date 2014-3-18 下午5:16:17* @version V1.0 */
public class ReflectFieldTest
{public static void main(String[] args)
{    Student stu=new Student();stu.setId(1L);stu.setName("Josean");stu.setNo("201403185203344");stu.setCreatedate(new Date());try{Field property1=stu.getClass().getDeclaredField("name");System.out.println(property1);//private java.lang.String com.cx.test.Student.nameField property3=stu.getClass().getField("nickname");System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname//错误方法 getField系列方法只能获取公共字段//Field property2=stu.getClass().getField("name");//System.out.println(property2);//会抛java.lang.NoSuchFieldException} catch (SecurityException e){e.printStackTrace();} catch (NoSuchFieldException e){e.printStackTrace();}
}}

2.进行属性获取更改

   得到这个Field之后你就可以获取他的值或者设置他的值了。

   获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。

   值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。

   同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。

import java.lang.reflect.Field;
import java.util.Date;
/*** @ClassName: ReflectFieldTest* @Description: 反射Field测试。* @author JoseanLuo  * @date 2014-3-18 下午5:16:17* @version V1.0 */
public class ReflectFieldTest
{public static void main(String[] args) throws Exception
{    Student stu=new Student();stu.setId(1L);stu.setName("Josean");stu.setNo("201403185203344");stu.setCreatedate(new Date());stu.setNickname("copyman");Field property1=stu.getClass().getDeclaredField("name");//System.out.println(property1);//out:private java.lang.String com.cx.test.Student.nameField property3=stu.getClass().getField("nickname");System.out.println(property3.get(stu));//System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname//错误方法 getField系列方法只能获取公共字段//Field property2=stu.getClass().getField("name");//System.out.println(property2);//会抛java.lang.NoSuchFieldExceptionField [] prFields4=stu.getClass().getDeclaredFields();for(Field field:prFields4){System.out.println(field);System.out.println(field.equals(property1));//私有变量必须先设置Accessible为truefield.setAccessible(true);//获取用get类方法。System.out.println(field.get(stu));}//设置用set类方法property3.set(stu, "名字被我改了,哈哈");System.out.println(stu.getNickname());}}

这个是控制台输出:

copyman
private java.lang.Long com.cx.test.Student.id
false
1
private java.lang.String com.cx.test.Student.name
true
Josean
private java.util.Date com.cx.test.Student.createdate
false
Tue Mar 18 18:19:39 CST 2014
private java.lang.String com.cx.test.Student.no
false
201403185203344
public java.lang.String com.cx.test.Student.nickname
false
copyman
名字被我改了,哈哈

是不是觉得很很简单呢 。

转载于:https://my.oschina.net/u/1407116/blog/209383

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。相关推荐

  1. JAVA反射系列之Method,java.lang.reflect.Method的使用

    摘要: ava.lang.reflect.Method的基本使用. 最近写项目,用反射的比较多,写一个总结,以便查阅. Method是反射最基本的一个类. 直接上代码: [java] view pla ...

  2. JAVA反射系列之Method,java.lang.reflect.Method的使用。

    2019独角兽企业重金招聘Python工程师标准>>> 最近写项目,用反射的比较多,写一个总结,以便查阅. Method是反射最基本的一个类. 直接上代码: /*** @ClassN ...

  3. java反射设置access_Java反射之java.lang.reflect.Field

    前面一章 讲了怎么通过Class获取到成员(成员变量.成员方法.构造器),本篇文章开始详细讲解成员变量(java.lang.reflect.Field)的详细用法. 获取field的类型 有两种方式可 ...

  4. Java反射系列--Type接口及其子接口

    原文网址:Java反射系列--Type接口及其子接口_IT利刃出鞘的博客-CSDN博客 简介 说明 Type 是java反射机制中提供的一个接口,用来表示java中的所有类型的接口.它们包括原始类型. ...

  5. Java 反射系列 —— 学习笔记

    Java 反射系列 1. 类成员 为了更好的描述,我们做个约定个通配符 XXXX, 如果是成员变量就代表 Field, 如果是类方法就代表 Method, 如果是构造器就代表 Constructor. ...

  6. java 反射 Gc_深入浅析Java反射机制

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...

  7. java反射是运行时,Java反射(三)在运行时利用反射分析对象

    在运行时利用反射分析对象,其实就是利用反射来获得或者设置类的域.举例如下: 有一个Student类: package testreflection; public class Student { pr ...

  8. 如何理解java反射_如何理解java反射?

    一.反射基本概念 反射之中包含了一个"反"的概念,所以要想解释反射就必须先从"正"开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产 ...

  9. 明翰Java教学系列之认识Java篇V1.3(持续更新)

    文章目录 传送门 前言 什么是Java? Java之父 `Java的应用场景` Java部分特点 Java工作机制 JDK(Java Development Kit) JRE(Java Runtime ...

最新文章

  1. mac上使用crontab周期性执行python脚本
  2. 一次 HashSet 所引起的并发问题
  3. cocos网络通信php,cocos2d-x网络编程 连接php服务器笔记2
  4. js ajax传对象数组参数,JS传递对象数组为参数给后端,后端获取
  5. 设计模式之【外观模式-Facade】
  6. MySQL分页查询小技巧
  7. 有python基础学java_Python基础学习篇
  8. metricbeat监控多个linux_Azure 虚拟机内存利用率监控(2)
  9. android能用svg格式,Android加载html中svg格式图片进行显示
  10. 蒸汽朋克简单图形免扣PNG素材,让设计艺术变得简单
  11. stm08S单片机C语言编,STM8S单片机入门1(开发环境搭建)
  12. oracle两表联查分页公式,Oracle中分页查询和联表查询
  13. 集合python_Python 集合
  14. 算法详解之狄克斯特拉算法
  15. uni - app的 nfc功能使用鱼住未来第三方插件完成
  16. Oracle as 10g安裝問題
  17. 单独招生计算机笔试是考什么,单招考试考什么内容 单招一般考什么科目
  18. R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用bgcolor函数自定义指定可视化图像的背景色
  19. JAVA_HOME环境变量
  20. 最新修复众人帮/蚂蚁帮任务平台系统源码+好看全新UI

热门文章

  1. 计算机一级查询记录,技巧查看电脑中使用过的记录痕迹的详细教程
  2. mysql同表字段前4位复制_MySQL不同表之前的字段复制
  3. 程序左上角的字_微信内测7.0.7新版本,小程序迎来大改动!
  4. Android打开谷歌应用,谷歌确认 Android 12 新增剪贴板访问提醒,将在 Beta 2 上线
  5. php 文件保存函数,php 写入和读取文件函数
  6. 深拷贝的缺点_拷贝?还傻傻分不清深浅?
  7. python3中的zip_Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
  8. Java HashMap与Hashtable数据结构和特点+HashSet简述
  9. 网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...
  10. linux cpu频率软件,linux cpu频率控制