码迷,mamicode.com
首页 > 其他好文 > 详细

反射机制总结----Field

时间:2015-04-05 09:15:24      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:java

反射机制非常有用,在运行的时候能获取我们需要的信息,下面就Field进行介绍

Field

Field,顾名思义,就是和字段有关的,没错,这个类可以帮助我们获取类里面和成员变量有关的信息

如果我们要获取一个类中的成员变量信息,那么,首先我们需要获取这个类的class对象(获取class方法)

Class clazz = TestReflect.class;
接着我们就可以利用clazz来得到Field

这时有两种方式

<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">第一种是获取某个</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">成员变量</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">的Field对象,参数为</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">成员变量</span><span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">名</span>

第二种是获取这个类中的所有成员变量的Field对象

第一种方式

Field field = clazz.getField("field1");

当我们只需要获取某个成员变量的信息时,用这种方式即可,获取之后可以通过下列方式来获取成员变量的值

System.out.println(field.get(clazz.newInstance()));
get需要传入这个类对应的对象,由于我们一开始获取了class对象,那么使用newInstance方法便可以获得到该类的对象

Field当中还有许多获取的方法,如getInt,getDouble,getChar等等,和数据类型对应,如果是String类型的话只能用get来获取

注意:

1.一般类中的成员变量都有初始值的,如果类中的成员变量没有指定初始化,那么使用该方式获取的值是是会得到初始值,但是如果是使用get来获取String的话是没有初始值的(得到是null)

2.另外,使用这种方式是无法获取私有变量的,如果获取的变量是私有变量的话会报错

如果想访问私有的变量,那么需要使用下面的方式(field2在类中是私有变量)

Field field = clazz.getDeclaredField("field2");
field.setAccessible(true);
两条代码都不能少,如果少了第二条还是会报错
这样就是获取私有变量的值了


第二种方式

Field[] fields = clazz.getFields();

getFields只能获取公有的变量,不能获取私有的变量,如果要获取私有的变量,可以用如下语句
Field field = clazz.getDeclaredFields("field2");
这样就能获取所有在类中声明的变量了(但是访问值的时候还是需要使用setAccessible设置为true)
下面用这种方式来打印出所有的变量名字和类型
for(int i = 0;i < fields.length;i++){
	fields[i].setAccessible(true);
	System.out.println(fields[i].getType() + "  " + fields[i].getName() + " =  " + fields[i].get(clazz.newInstance()));
}
输出如下
int  field1 =  0
int  field2 =  2
int  field3 =  3



反射机制总结----Field

标签:java

原文地址:http://blog.csdn.net/u013160932/article/details/44873905

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!