zoukankan      html  css  js  c++  java
  • 反射,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类自己拟一个测试一下就知道了。

     
  • 相关阅读:
    iLearning D3.js 2.0 released
    A better way to learn D3 js
    数据中台解析Hive SQL过程
    go语言刷leetcode
    go语言刷leetcode
    普通方法多态,属性,私有方法和静态方法不多态
    Kafka spring 集成
    Scala Sublime text 3 Build 编译
    tornado settings想到的
    linux 线程回顾
  • 原文地址:https://www.cnblogs.com/pxffly/p/8482504.html
Copyright © 2011-2022 走看看