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();
}
}
}
反射之Field类常用方法
最新推荐文章于 2024-07-30 15:37:43 发布