反射的作用:
1. 反编译:.class-->.java
2. 在运行状态中,通过反射机制访问java对象的属性,方法,构造方法等;
反射的实现
//第一种方式: Class c1 = Class.forName("Employee"); //第二种方式: //java中每个类型都有class 属性. Class c2 = Employee.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employeee = new Employee(); Class c3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
带构造参数的类反射
// 获得指定字符串类对象 Class cl = Class.forName("com.test.User"); //设置Class对象数组,用于指定构造方法类型 Class[] parameterTypes = new Class[] { String.class, int.class }; //获得Constructor构造器对象。并指定构造方法类型 Constructor constructor = cl.getConstructor(parameterTypes); //给传入参数赋初值 Object[] parameter = { "lili", new Integer(15) }; //得到实例 Object newInstance = constructor.newInstance(parameter);
执行方法
Class<?> class1 = Class.forName("com.test.User"); Method method = class1.getMethod("getName"); User newInstance = (User) class1.newInstance(); newInstance.setName("crazy"); // 执行方法,并返回方法的返回值 Object result = method.invoke(newInstance); System.out.println("crazy:"+result);