Java:反射:Field用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38750084/article/details/83962997

在Java反射中Field用于获取某个类的属性或该属性的属性值

一:如何通过Field反射获取类的属性
 Field提供如下几种方法:

1:Class.getDeclaredField(String name);

返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)。

2:Class.getDeclaredFields();

 返回 Field 对象的一个数组,该数组包含此 Class 对象所表示的类或接口所声明的所有字段(包括私有成员)。

3:Class.getField(String name);

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

4:Class.getFields();

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

下面一个例子说明如何通过Field反射获取类中的属性

我们先定义一个普通类Person 

包含三个属性 公有name 私有age、sex
 

package testReflect;

public class Person {
	
		public String name;
		private Integer age;
		private String sex;
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Integer getAge() {
			return age;
		}
		public void setAge(Integer age) {
			this.age = age;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		@Override
		public String toString() {
			return "Person [name=" + name + ", age=" + age + ", sex=" + sex
					+ "]";
		}

		

}

Test类  测试

package testReflect;

import java.lang.reflect.Field;
/**
 * 通过Field反射的各方法访问属性
 * @author 5_6-TANGZHANBO
 *
 */
public class Test 
{
	public static void main(String[]args) throws NoSuchFieldException, SecurityException
	{
		
		Person p = new Person();
		p.setAge(30);
		//通过Class.getDeclaredField(String name)获取类或接口的指定的已声明字段。
		Field f1 = p.getClass().getDeclaredField("name");
		System.out.println("f1==="+f1);
		
		//通过Class.getDeclaredFields()获取类或接口的指定已声明字段。
		Field[] f2 = p.getClass().getDeclaredFields();
		
		for (Field field : f2) {
			System.out.println("f2--field  "+field);
		}
		
		//Class.getField(String name)用法
		//通过Class.getField(String name)返回一个类或接口的指定的公共成员字段,私有成员报错。
		Field f3_0 = p.getClass().getField("name");
		System.out.println("f3_0==="+f3_0);
		
		//如果获取age属性(私有成员) 则会报错 ,age是private
		//Field f3_1 = p.getClass().getField("age");//Exception in thread "main" java.lang.NoSuchFieldException: age
		//System.out.println("f3_1==="+f3_1);
		
		//Class.getFields()用法
		//通过Class.getFields(),返回 Class 对象所表示的类或接口的所有可访问公共字段。
		
		Field f4 [] = p.getClass().getFields();
		
		for (Field field : f4) {
			//因为只有name属性为共有,因此只能遍历出name属性
			System.out.println("f4--field  "+field);
		}
		
	}
}

测试结果:

猜你喜欢

转载自blog.csdn.net/weixin_38750084/article/details/83962997