JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。
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使用获取方法。相关推荐
- JAVA反射系列之Method,java.lang.reflect.Method的使用
摘要: ava.lang.reflect.Method的基本使用. 最近写项目,用反射的比较多,写一个总结,以便查阅. Method是反射最基本的一个类. 直接上代码: [java] view pla ...
- JAVA反射系列之Method,java.lang.reflect.Method的使用。
2019独角兽企业重金招聘Python工程师标准>>> 最近写项目,用反射的比较多,写一个总结,以便查阅. Method是反射最基本的一个类. 直接上代码: /*** @ClassN ...
- java反射设置access_Java反射之java.lang.reflect.Field
前面一章 讲了怎么通过Class获取到成员(成员变量.成员方法.构造器),本篇文章开始详细讲解成员变量(java.lang.reflect.Field)的详细用法. 获取field的类型 有两种方式可 ...
- Java反射系列--Type接口及其子接口
原文网址:Java反射系列--Type接口及其子接口_IT利刃出鞘的博客-CSDN博客 简介 说明 Type 是java反射机制中提供的一个接口,用来表示java中的所有类型的接口.它们包括原始类型. ...
- Java 反射系列 —— 学习笔记
Java 反射系列 1. 类成员 为了更好的描述,我们做个约定个通配符 XXXX, 如果是成员变量就代表 Field, 如果是类方法就代表 Method, 如果是构造器就代表 Constructor. ...
- java 反射 Gc_深入浅析Java反射机制
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...
- java反射是运行时,Java反射(三)在运行时利用反射分析对象
在运行时利用反射分析对象,其实就是利用反射来获得或者设置类的域.举例如下: 有一个Student类: package testreflection; public class Student { pr ...
- 如何理解java反射_如何理解java反射?
一.反射基本概念 反射之中包含了一个"反"的概念,所以要想解释反射就必须先从"正"开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产 ...
- 明翰Java教学系列之认识Java篇V1.3(持续更新)
文章目录 传送门 前言 什么是Java? Java之父 `Java的应用场景` Java部分特点 Java工作机制 JDK(Java Development Kit) JRE(Java Runtime ...
最新文章
- mac上使用crontab周期性执行python脚本
- 一次 HashSet 所引起的并发问题
- cocos网络通信php,cocos2d-x网络编程 连接php服务器笔记2
- js ajax传对象数组参数,JS传递对象数组为参数给后端,后端获取
- 设计模式之【外观模式-Facade】
- MySQL分页查询小技巧
- 有python基础学java_Python基础学习篇
- metricbeat监控多个linux_Azure 虚拟机内存利用率监控(2)
- android能用svg格式,Android加载html中svg格式图片进行显示
- 蒸汽朋克简单图形免扣PNG素材,让设计艺术变得简单
- stm08S单片机C语言编,STM8S单片机入门1(开发环境搭建)
- oracle两表联查分页公式,Oracle中分页查询和联表查询
- 集合python_Python 集合
- 算法详解之狄克斯特拉算法
- uni - app的 nfc功能使用鱼住未来第三方插件完成
- Oracle as 10g安裝問題
- 单独招生计算机笔试是考什么,单招考试考什么内容 单招一般考什么科目
- R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用bgcolor函数自定义指定可视化图像的背景色
- JAVA_HOME环境变量
- 最新修复众人帮/蚂蚁帮任务平台系统源码+好看全新UI
热门文章
- 计算机一级查询记录,技巧查看电脑中使用过的记录痕迹的详细教程
- mysql同表字段前4位复制_MySQL不同表之前的字段复制
- 程序左上角的字_微信内测7.0.7新版本,小程序迎来大改动!
- Android打开谷歌应用,谷歌确认 Android 12 新增剪贴板访问提醒,将在 Beta 2 上线
- php 文件保存函数,php 写入和读取文件函数
- 深拷贝的缺点_拷贝?还傻傻分不清深浅?
- python3中的zip_Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
- Java HashMap与Hashtable数据结构和特点+HashSet简述
- 网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...
- linux cpu频率软件,linux cpu频率控制