java反射机制详解 及 Method.invoke解释 今天药忘吃喽~ 2021-11-11 05:12 276阅读 0赞 JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。 1. 得到某个对象的属性 public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner.getClass(); Field field = ownerClass.getField(fieldName); Object property = field.get(owner); return property; } Class ownerClass = owner.getClass():得到该对象的Class。 Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。 Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。 2. 得到某个类的静态属性 public Object getStaticProperty(String className, String fieldName) throws Exception { Class ownerClass = Class.forName(className); Field field = ownerClass.getField(fieldName); Object property = field.get(ownerClass); return property; } Class ownerClass = Class.forName(className) :首先得到这个类的Class。 Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。 Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。 3. 执行某对象的方法 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { Class ownerClass = owner.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName,argsClass); return method.invoke(owner, args); } Class owner\_class = owner.getClass() :首先还是必须得到这个对象的Class。 5~9行:配置参数的Class数组,作为寻找Method的条件。 Method method = ownerClass.getMethod(methodName, argsClass):通过methodName和参数的argsClass(方法中的参数类型集合)数组得到要执行的Method。 method.invoke(owner, args): 执行该Method.invoke方法的参数是执行这个方法的对象owner,和参数数组args,可以这么理解:owner对象中带有参数args的 method方法。返回值是Object,也既是该方法的返回值。 4. 执行某个类的静态方法 public Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception { Class ownerClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName,argsClass); return method.invoke(null, args); } 基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。 5. 新建实例 public Object newInstance(String className, Object[] args) throws Exception { Class newoneClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Constructor cons = newoneClass.getConstructor(argsClass); return cons.newInstance(args); } 这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。 Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。 第5~第9行:得到参数的Class数组。 Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。 cons.newInstance(args):新建实例。 6. 判断是否为某个类的实例 public boolean isInstance(Object obj, Class cls) { return cls.isInstance(obj); } 7. 得到数组中的某个元素 public Object getByArray(Object array, int index) { return Array.get(array,index); } 转载于:https://www.cnblogs.com/coprince/p/3736820.html
相关 详解Java反射机制及应用 Java反射机制是Java语言提供的一种能力,允许程序在运行时检查类、字段和方法的信息,甚至动态调用它们。 以下是反射机制的主要内容: 1. **Class**:类是反射的 刺骨的言语ヽ痛彻心扉/ 2024年10月07日 06:45/ 0 赞/ 56 阅读
相关 Java反射机制详解及实例 Java反射机制是Java语言强大的特性之一,它允许我们在运行时检查类的信息、创建对象或调用方法。 以下是对Java反射机制的详细解释和一些实例: 1. **获取类信息:* ゞ 浴缸里的玫瑰/ 2024年09月24日 04:54/ 0 赞/ 124 阅读
相关 Java反射机制的问题:案例及解释 Java反射机制是指在运行状态中,对于任何对象,都能够知道这个对象所属的类;并且能够通过类来创建该类的对象,以及访问和修改对象的字段值。 案例解析: 1. 类的获取: `` 秒速五厘米/ 2024年09月23日 18:36/ 0 赞/ 44 阅读
相关 解释Java反射机制及常见应用 Java反射机制是Java语言提供的一种允许程序在运行时检查类、字段和方法的特性,甚至可以动态地调用这些对象的方法。 常见应用如下: 1. 动态加载类:当知道类名但不确定是 太过爱你忘了你带给我的痛/ 2024年09月23日 17:15/ 0 赞/ 57 阅读
相关 Java反射机制详解及应用案例 Java的反射机制是一种强大的工具,它允许我们在运行时检查类、对象和方法的信息。下面我们将详细解读反射机制,并通过一些实际案例来理解它的运用。 1. **什么是反射**: 分手后的思念是犯贱/ 2024年09月06日 00:30/ 0 赞/ 73 阅读
相关 Java反射机制详解及常见问题 Java的反射机制是Java动态性的一部分,它允许我们在运行时检查类、接口、方法和字段的信息。以下是详细的解释: 1. **Class**:所有反射操作都是针对Class对象 偏执的太偏执、/ 2024年09月05日 19:09/ 0 赞/ 56 阅读
相关 java反射机制详解及应用 1.如何创建Class的实例(反射的源头) 理解: Class是一个对象,对应一个运行时类。相当于一个运行时类本身充当了Class的一个实例 过程: 源文件经过编译(j 亦凉/ 2022年08月23日 03:52/ 0 赞/ 213 阅读
相关 java反射机制详解 及 Method.invoke解释 JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调 今天药忘吃喽~/ 2021年11月11日 05:12/ 0 赞/ 277 阅读
还没有评论,来说两句吧...