反射:
java的反射用法:(异常请自行处理)
①找到类:Class cl = Class.forName("java.util.Date");
②创建对象(要求这个类中含有空参数的构造方法):Object obj = cl.newInstence();
③根据名称和参数找方法:Method method1 = cl.getMethod("getTime");//如果没有参数不用写第二个参数如果有参数的如:Method method2 = cl.getMethod("setTime",long.class);
④在某个对象上面执行方法,Object result = method1.invoke(obj);//如果有参数的Object result = method2.invoke(obj,21317362721);
执行的方如果有返回值,将返回值返回,否则返回null。
案例:
1 public class ReflectDemo { 2 public static void main(String[] args) { 3 //Class clz = Student.class; 4 Student stu = new Student(); 5 printInfo(stu); 6 System.out.println("=============================="); 7 Date date = new Date(); 8 printInfo(date); 9 } 10 public static void printInfo(Object obj){ 11 Class clz = obj.getClass(); 12 //获取对象对应的类的全名称 13 System.out.println(clz.getName()); 14 //获取对象对应的类的名称 15 System.out.println(clz.getSimpleName()); 16 //获取对象对应的类的所有构造方法 17 Constructor[] cons = clz.getConstructors(); 18 for (int i = 0; i < cons.length; i++) { 19 System.out.println("构造方法:"+cons[i]); 20 } 21 //获取对象对应的类的所有属性 22 Field[] fields = clz.getFields(); 23 for (int i = 0; i < fields.length; i++) { 24 Field field = fields[i]; 25 System.out.println("属性:"+field.getType()+","+field.getName()); 26 } 27 //获取对象对应的类的所有方法 28 Method[] mtds= clz.getMethods(); 29 for (int i = 0; i < mtds.length; i++) { 30 Method mt = mtds[i]; 31 System.out.println("方法:"+mt.getName()); 32 //mt.invoke(obj, args); 33 } 34 } 35 }
student类自己拟一个测试一下就知道了。