反射,invoke()

反射:

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类自己拟一个测试一下就知道了。

 
posted @ 2018-02-28 11:07  狂妄的老头  阅读(215)  评论(0编辑  收藏  举报