反射之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();
		}

	}
}

1. 反射的定义:反射是指在运行时动态地获取和操作的信息的能力。通过反射,我们可以在运行时获取的属性、方法和构造函数等信息,并且可以动态地调用这些方法和访问这些属性。 反射的用途: - 动态加载:在运行时根据某些条件动态地加载和使用。 - 动态获取的信息:可以获取的属性、方法和构造函数等信息。 - 动态调用方法:可以在运行时根据方法名动态地调用方法。 - 动态修改属性:可以在运行时获取和设置的属性值。 - 实现通用框架和工具:反射使得我们可以编写更通用、灵活的代码,例如自动化测试框架、ORM(对象关系映射)框架等。 2. 反射常用方法: - Class :表示一个或接口,在反射中经常使用该来获取的信息。 - Class.forName(String className):根据名动态加载,并返回对应的 Class 对象。 - getClass():返回对象的 Class 对象。 - Constructor :表示的构造函数。 - getConstructors():返回的所有公共构造函数。 - newInstance(Object... initargs):通过构造函数创建的对象。 - Field :表示的属性。 - getFields():返回所有公共属性。 - getField(String name):根据属性名获取指定的公共属性。 - getDeclaredFields():返回所有属性,包括私有属性。 - getDeclaredField(String name):根据属性名获取指定的属性,包括私有属性。 - Method :表示方法。 - getMethods():返回的所有公共方法。 - getMethod(String name, Class<?>... parameterTypes):根据方法名和参数型获取指定的公共方法。 - getDeclaredMethods():返回的所有方法,包括私有方法。 - getDeclaredMethod(String name, Class<?>... parameterTypes):根据方法名和参数型获取指定的方法,包括私有方法。 这些方法反射常用的工具,通过它们可以实现对的动态加载、属性访问、方法调用等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值