反射之Field类常用方法

package ClassTest;
/*
 * 创建一个类,两个构造器。一个带参。一个无参,三个属性
 * 测试反射,调用反射创建类实例
 */
public class UserPo {
	private int id;
	private String name;
	private String pw;
	/*无参构造器*/
	public UserPo() {
		super();
	}
	/*有参构造器*/
	public UserPo(int id, String name, String pw) {
		super();
		this.id = id;
		this.name = name;
		this.pw = pw;
	}
	/*封装属性*/
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	
}
public class UserPoTest {
	public static void main(String[] args) {
		/* 获取UserPo的类对象的Class对象 */
		Class<?> userPoClass = null;
		try {
			/**
			 * 实例化对象演示
			 */
			userPoClass = Class.forName("ClassTest.UserPo");
			/* 调用Class类的方法newInstance实例化对象,类型转换 */
			UserPo uerPo = (UserPo) userPoClass.newInstance();
			/* 调用class对象获取构造器对象,调用构造器对象newInstance实例化对象 */
			Constructor<?> userPoconstructor = userPoClass.getConstructor(int.class, String.class, String.class);
			/* 调用构造器对象创建实例 */
			UserPo uerPoConstructorClass = (UserPo) userPoconstructor.newInstance(12, "name", "id");
			
			/* 调用构造器返回类的修饰符 */
			String string = Modifier.toString(userPoconstructor.getModifiers());				
			/**
			 * Field类方法演示
			 * 方法:getModifiers(),返回int属性的修饰符的代表数字
			 * 方法:getType(),返回属性类型的Class对象
			 */

			/*
			 * 调用Class类方法getFields(),返回属性类数组(共有属性), getDeclaredFields(),返回类声明的属性数组
			 */
			Field[] userFields = userPoClass.getDeclaredFields();

			for (Field e : userFields) {
				/* Fields类的方法getName()方法,返回属性的名字字符串 */
				if (e.getName() == "id") {
					/* Field对象的方法getType(),获取属性的类型,返回值是Class对象 */
					Class<?> Eclass = e.getType();
					/* 调用Class方法打印属性的类名字 */
					System.out.println(Eclass.getSimpleName());
					/* 获取属性的修饰符,并利用Modifier的toString转换为String */
					String EModifier = Modifier.toString(e.getModifiers());
					System.out.println(EModifier);
					/* 获取属性权限,类中定义的是private类 */
					e.setAccessible(true);
					/* 获取实例类中的属性的值 */
					e.get(uerPoConstructorClass);
					System.out.println(e.get(uerPoConstructorClass));
					/* 设置属性值 */
					e.set(uerPoConstructorClass, 23);
					System.out.println(e.get(uerPoConstructorClass));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

猜你喜欢

转载自blog.csdn.net/coco_love24/article/details/80699094