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