• Java反射笔记


    关于反射的使用教程很多,这里就不介绍了,因为平时用的实在不多,所以主要记录一下整体常用的过程以备之后查找。

    使用反射的时候有几个类比较重要,分别是 Class「类的类型信息」、Constructor「构造器」、Method「方法」和 Field「属性」。在 Class 类中保存着类的所有信息,猜测其实Class类是对字节码文件解析后保存的结果,其中自然有对应类的所有信息,而其他的三个类则对应着类中的构造器、方法和属性,可以通过Class类的对应方法(如:class.getConstructors()等)来获取。

    通过构造器类,我们可以创建这个对象(如:constructor.newInstance(Object... initargs));

    通过方法类,我们可以获取方法,并且调用方法(如:method.invoke(Object obj, Object... args)),其中第一个参数obj为要执行此方法的对象,一般情况下为之前的构造器类创建的对象,第二个参数为调用的方法的参数;

    通过属性类,可以获取类的所有属性。

    当然,实际的功能方法远远不止这些,这里就不一一列举了。

    实际使用时,最简单的使用情况为:

    1. 通过类的全限定名获取类的Class对象。

    2. 通过Class对象获取它的构造器对象和方法对象等。

    3. 通过构造器对象创建类的实例。

    4. 调用对应方法对象的invoke(Object obj, Object... args)方法,传入构造器创建的实例和方法所需参数。

    5. 获取方法执行后的结果,根据需要进行强制类型转换。

    下面列举一个简单例子供大家参考:

    package com.reflect;
    ​
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    ​
    public class ReflectTest {
        public static void main(String[] args) throws Exception {
            String className = "com.reflect.MyTest";
    ​
            Class<?> clz = Class.forName(className);
            Constructor<?> constructor = clz.getConstructor();
            Method method = clz.getDeclaredMethod("test");
    ​
            Object instance = constructor.newInstance();
            String result = (String) method.invoke(instance);
            System.out.println(result);
        }
    }

    对应的测试的类代码为:

    package com.reflect;
    ​
    public class MyTest {
        public String test() {
            return "Hello, This is Test";
        }
    }
  • 相关阅读:
    win7(64)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序的解决办法
    很方便的工具——代码生成工具之Winform查询列表界面生成
    程序员十几个常用网站
    优秀程序员不得不知道的20个位运算技巧
    unset()索引数组
    git 撤销修改
    git 版本回退
    git 命令详解
    git多账户配置
    Git的.ssh文件夹的内容
  • 原文地址:https://www.cnblogs.com/zawier/p/6713736.html
Copyright © 2020-2023  润新知