Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,
可以了解任意一个对象所属的类,
可以了解任意一个类的成员变量和方法,
可以调用任意一个对象的属性和方法。
这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
public static void main(String[] args) {
Class c1 = null;
try {
//第一种方式:Class.forName("完整类名");
c1 = Class.forName("java.lang.String");
Class c2 = Class.forName("java.util.Date");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//第二种方式:类名.class
Class c3 = java.lang.String.class;
/**
* 第三种方式:
* 先创建对象,拿到对象的引用
* 调用对象的getClass方法拿到Class对象
*/
String s = new String();
Class c4 = s.getClass();
System.out.println(c1 == c3);//true
System.out.println(c3 == c4);//true,说明两个对象的内存地址是一样的
}
User类:
class User {
private String name;
private Integer age;
private String sex;
}
反射获取User对象:
public static void main(String[] args) throws Exception {
Class<?> demo = Class.forName("User");
Object obj = demo.newInstance();
// 获取这个对象
Class<?> objClass = obj.getClass();
// 获取到所有的属性
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
// 获取修饰符
int i = field.getModifiers();
String modifier = Modifier.toString(i);
// 获取属性类型
Class<?> type = field.getType();
String simpleName = type.getSimpleName();
// 获取属性名
String fieldName = field.getName();
System.out.println(modifier + " " + simpleName + " " + fieldName);
}
}
输出结果:
private String name private Integer age private String sex
原文:https://www.cnblogs.com/zhangzhixi/p/14730476.html