zoukankan      html  css  js  c++  java
  • java通过反射获取调用变量以及方法

    一:反射概念

    可以通过Class类获取某个类的成员变量以及方法,并且调用之。

    二:通过反射获取方法、变量、构造方法

     1 @Test
     2     // 通过反射获取类定义的方法
     3     public void testMethod() throws Exception {
     4         @SuppressWarnings("rawtypes")
     5         Class clazz = Class.forName("java.lang.String");
     6         Method[] m = clazz.getDeclaredMethods();
     7         for (int i = 0; i < m.length; i++) {
     8             System.out.println(m[i].getName() + " " + m[i].getDeclaringClass());
     9         }
    10     }
    11 
    12     @Test
    13     // 通过反射获取类定义的变量
    14     public void testField() throws Exception {
    15         @SuppressWarnings("rawtypes")
    16         Class clazz = Class.forName("java.lang.String");
    17         Field[] fields = clazz.getFields();
    18         for (Field f : fields) {
    19             System.out.println(f.getName());
    20         }
    21     }
    22 
    23     @Test
    24     // 通过反射获取类定义的构造方法
    25     public void testConstructor() throws Exception {
    26         @SuppressWarnings("rawtypes")
    27         Class clazz = Class.forName("java.lang.String");
    28         @SuppressWarnings("rawtypes")
    29         Constructor[] cons = clazz.getConstructors();
    30         for (@SuppressWarnings("rawtypes")
    31         Constructor c : cons) {
    32             System.out.println(c + " " + c.getDeclaringClass());
    33         }
    34     }

    三:通过反射调用类定义的方法

     1 @Test
     2     // 通过反射调用类定义的方法
     3     public void testInvokeMethod() throws Exception {
     4         Class clazz = Class.forName("java.lang.String");
     5         // 定义参数类型
     6         Class[] params = new Class[1];
     7         params[0] = String.class;
     8         Method m = clazz.getDeclaredMethod("indexOf", params);
     9         // 设置参数
    10         Object[] p = new Object[1];
    11         p[0] = "e";
    12         Integer s = (Integer) m.invoke("helloworld!", p);
    13         System.out.println(s);
    14     }
  • 相关阅读:
    原生js实现 table表格列宽拖拽
    vue.js 利用SocketCluster实现动态添加数据及排序
    angular-websocket.js 使用
    判断当前页面是否是激活状态。
    remove ---会报错discard不会报错
    .pop ----remove 删除
    add添加
    #将相同值输出,取一个值
    集合
    __delattr__\__delitem__
  • 原文地址:https://www.cnblogs.com/warrior4236/p/5699511.html
Copyright © 2011-2022 走看看