一、反射简单介绍
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二、作用
1,反编译:.class–>.java
2,通过反射机制访问java对象的属性,方法,构造方法等;
三、简单实例
UserBean类:
public class UserBean {
private String userId;
private String userName;
private String phone;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
测试类
public class Ttest {
@SuppressWarnings("unchecked")
public static <T> T test(String n) {
Class<?> class1 = null;
T t = null;
try {
class1 = Class.forName(n);
// class1 = UserBean.class;
t = (T) class1.newInstance();
// 获取所有的属性
Field[] fs = class1.getDeclaredFields();
StringBuffer buffer = new StringBuffer();
buffer.append(Modifier.toString(class1.getModifiers()) + " class "
+ class1.getSimpleName() + "{\n");
for (Field field : fs) {
buffer.append("\t");
buffer.append(Modifier.toString(field.getModifiers()) + " ");
buffer.append(field.getType().getSimpleName() + " ");
buffer.append(field.getName() + ";\n");
}
buffer.append("}");
System.out.println(buffer);
Field idF = class1.getDeclaredField("userId");
idF.setAccessible(true);
idF.set(t, "123456");
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
public static void main(String[] args) {
UserBean usBean = test("test.UserBean");
System.out.println(usBean.getUserId());
}
}
运行效果如下:
public class UserBean{
private String userId;
private String userName;
private String phone;
}
123456
大体就是这样用,先记录一下,有时间再深入理解一下。