Java反射机制详解 及 Method.invoke解释

OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域 OpenCV是一个强大的计算机视觉库,广泛应用于图像处理、计算机视觉和机器学习等领域。本文将介绍OpenCV中的一些基础功能,包括如何绘制图形、创建图像金字塔以及如何处理感兴趣区域(ROI)。 阅读详情

JAVA反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
1. 得到某个对象的属性

Java代码  收藏代码
  1. public Object getProperty(Object owner, String fieldName) throws Exception {  
  2.      Class ownerClass = owner.getClass();  
  3.    
  4.      Field field = ownerClass.getField(fieldName);  
  5.    
  6.      Object property = field.get(owner);  
  7.    
  8.      return property;  
  9. }  

 
Class ownerClass = owner.getClass():得到该对象的Class。

Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。

Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

2. 得到某个类的静态属性

Java代码  收藏代码
  1. public Object getStaticProperty(String className, String fieldName)  
  2.              throws Exception {  
  3.      Class ownerClass = Class.forName(className);  
  4.    
  5.      Field field = ownerClass.getField(fieldName);  
  6.    
  7.      Object property = field.get(ownerClass);  
  8.    
  9.      return property;  
  10. }  

 

Class ownerClass = Class.forName(className) :首先得到这个类的Class。

Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。

Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。

3. 执行某对象的方法

Java代码  收藏代码
  1. public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {  
  2.    
  3.      Class ownerClass = owner.getClass();  
  4.    
  5.      Class[] argsClass = new Class[args.length];  
  6.    
  7.      for (int i = 0, j = args.length; i < j; i++) {  
  8.          argsClass[i] = args[i].getClass();  
  9.      }  
  10.   
  11.       Method method = ownerClass.getMethod(methodName,argsClass);  
  12.    
  13.      return method.invoke(owner, args);  
  14. }  

 
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. 执行某个类的静态方法

Java代码  收藏代码
  1. public Object invokeStaticMethod(String className, String methodName,  
  2.              Object[] args) throws Exception {  
  3.      Class ownerClass = Class.forName(className);  
  4.    
  5.      Class[] argsClass = new Class[args.length];  
  6.    
  7.      for (int i = 0, j = args.length; i < j; i++) {  
  8.          argsClass[i] = args[i].getClass();  
  9.      }  
  10.    
  11.     Method method = ownerClass.getMethod(methodName,argsClass);  
  12.    
  13.      return method.invoke(null, args);  
  14.  }  

 

基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。

5. 新建实例

Java代码  收藏代码
  1. public Object newInstance(String className, Object[] args) throws Exception {  
  2.      Class newoneClass = Class.forName(className);  
  3.    
  4.      Class[] argsClass = new Class[args.length];  
  5.    
  6.      for (int i = 0, j = args.length; i < j; i++) {  
  7.          argsClass[i] = args[i].getClass();  
  8.      }  
  9.    
  10.      Constructor cons = newoneClass.getConstructor(argsClass);  
  11.    
  12.      return cons.newInstance(args);  
  13.    
  14. }  

 
这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。

Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。

第5~第9行:得到参数的Class数组。

Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。

cons.newInstance(args):新建实例。

6. 判断是否为某个类的实例

Java代码  收藏代码
  1. public boolean isInstance(Object obj, Class cls) {  
  2.      return cls.isInstance(obj);  
  3. }  

 
7. 得到数组中的某个元素

Java代码  收藏代码
  1. public Object getByArray(Object array, int index) {  
  2.      return Array.get(array,index);  
  3. } 
Python爬虫selenium验证-中文识别点选+图片验证码案例 环境对模型进行训练,参考:https://github.com/sml2h3/dddd_trainer。能识别,但是发现默认识别率有点低,想要提升识别率,可以搭建。截图每个字符,并基于ddddocr识别。根据坐标,在验证码上进行点击。 阅读详情

相关推荐

SVG文件上传漏洞实战:从XSS攻击到防御策略

本文深入剖析了SVG文件上传漏洞的成因与危害,揭示了攻击者如何利用SVG的XML本质构造恶意文件,绕过常规检查实现存储型XSS攻击。文章通过实战复现演示了完整的攻击链,并提供了从严格内容检查、安全解析过滤到设置CSP策略等多层次的纵深防御方案,帮助开发者从根本上加固文件上传功能。

weixin_29230805的博客 395

java中Method.invoke方法参数解析

通过反射的机制,可以通过invoke方法来调用类的函数。invoke函数的第一个参数是方法的实例,如果该方法是静态方法,可以用null或者用类来代替,第二个参数是变长的,是调用该方法的参数。 package com.tn.class; import java.lang.reflect.Method; import java.util.Arrays; public class Client { public static void main(String[] args) throws Except

Moneys的博客 1万+

MySQL等保三级合规实践:如何安全配置root账户的本地与受信主机登录策略

本文详细介绍了MySQL在等保三级合规框架下如何安全配置root账户的本地与受信主机登录策略。通过分析root账户的特殊保护需求,提供三种安全加固方案,包括限制访问范围、限定登录IP和完全禁止远程登录,并指导创建安全的远程管理账户。文章还涵盖了密码策略强化、日志审计配置和网络层防护等关键合规要求,帮助用户实现MySQL的等保三级全面合规。

weixin_42522964的博客 259

Method中的invoke方法

方法的作用是使用反射机制动态调用对象的方法,并返回方法执行后的结果。的方法对象,然后创建了该类的实例,并使用。在上面的示例中,我们通过反射获取了类。方法动态调用了该方法,并传入了参数。异常,因此在使用时需要进行异常处理。最后打印了方法执行的结果。

qq_45044477的博客 1246

双层优化入门(1)—基本原理与求解方法(附matlab代码)

双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。

配电网和matlab的博客 5万+

别再乱按F8了!Win10系统修复的正确姿势:用管理员CMD运行sfc /scannow

本文详细介绍了Windows 10系统修复的正确方法,重点推荐使用管理员CMD运行`sfc /scannow`命令。相比传统的F8键和重装系统,这一方法更高效且安全,能解决大多数系统文件损坏问题。文章还提供了管理员CMD的启动方式、sfc命令的完整参数解析以及实战故障排除流程图,帮助用户快速恢复系统健康。

weixin_29218963的博客 459

Method类invoke方法的使用

java.lang.reflect.Method public Object invoke(Object obj,Object args[]) 参数: obj - 从中调用底层方法的对象,必须是实例化的对象 args - 用于方法调用的参数,是个Object数组,因为参数有可能有多个 返回:使用参数 args 在 obj 上指派该对象所表示方法的结果  例如:String result

任何路都没有错,关键是要知道自己在哪 1963

AURIX-TC3xx-GTM详解六-DPLL(Digital PLL Module)-寄存器1-DPLL寄存器

主要有下图这些寄存器2、

m0_69929716的博客 439

method.invoke()和invoke()简单理解

首先说下作用,method.invoke(Object obj,Object args[])的作用就是调用method类代表的方法,其中obj是对象名,args是传入method方法的参数 举个例子:如果接口中没有close方法,但是实现类中提供了close,那么就可以用反射来处理,调用实现类的close方法 首先说下作用,method.invoke(Object obj,Object args[...

读研功夫 8125

第201期 解锁科研效率新高度:Claude 科学技能插件(claude-scientific-skills)深度体验

科研AI助手Claude Scientific Skills开源工具为Claude大模型扩展科学能力,覆盖数据可视化、数学计算、学术格式处理等科研全流程需求。该插件支持LaTeX公式生成、自动化科研图表绘制、学术文档规范校正等功能,让研究人员通过自然语言指令即可完成专业任务。项目开源可定制,支持特定学科需求扩展,目前已托管于GitHub。使用门槛低,只需配置Claude API密钥即可快速启用,帮助科研人员从繁琐技术细节中解放,聚焦核心研究创新。

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 1358

Python学习第1天:初识Python

Python 作为目前最流行的编程语言之一,凭借其简洁优雅的语法和强大的生态系统,成为了无数开发者的首选。本系列文章将带你从零基础入门,逐步掌握 Python 编程的核心技能。今天我们先来认识 Python,并安装好开发环境。Python(英式发音:/ˈpaɪθən/;美式发音:/ˈpaɪθɑːn/)是由荷兰人吉多·范罗苏姆(Guido von Rossum)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户的编程语言。

tigerhhzz的博客 434

commons-lang3的反射工具类之MethodUtils(1)

上一篇我们介绍了通过ConstructorUtils类来创建实例,今天我们来讲解下MethodUtils怎样调用静态方法和非静态方法,以及对比java反射调用静态方法和非静态方法。熟悉java反射的同学们,看到下边的例子会更加体会到这个类的好处。 MethodUtils 该类是调用对象方法的工具类。 怎样调用静态方法 我们拿Integer#max的静态方法来举...

dy051107的博客 2454

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java反射机制详解 及 Method.invoke解释

java反射机制详解 及 Method.invoke解释 博客分类: java+jsp JavaJ#  JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断

ccecwg的专栏 566

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java反射机制详解 及 Method.invoke getDeclareMethod解释

package kai.wu.dhwerbo.jol; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * * * GOOK LUCK * * * * @Author: wkn * @Date: 2020/8/14. * @DESC: */ public class MethInvoke { public void add() { .

TonyWu的博客 748

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java反射机制详解 及 Method.invoke 解释

Java反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为:Java语言的反射机制。 Java反射机制主要提供以下几个功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方...

White_BaiSmall的博客 1329

java反射机制详解 及 Method.invoke解释 getMethod

JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对

kf_panda 344
上一篇: Java 反射机制
下一篇: Java集合类详解
鹿晗的晗
博客等级 码龄16年 22粉丝 23原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值