最近复习了一下Java反射的使用,只知道Java反射中的invoke()方法,整理了一下,简化了一点,分享一下。有兴趣的可以看看。
先说java中的反射:
反射就是分析一个类别的各个组成部分,得到每个组成部分,然后对每个组成部分进行操作。
反射机制应用场景:逆向代码,动态生成类框架等。使用反射机制可以大大增强程序的可扩展性。
反射的基本步骤:先获取类对象,然后实例化对象,获取类的属性、方法或构造函数,最后访问属性,调用方法和构造函数创建对象。invoke()方法是用于执行指定对象的方法。
在复杂的程序或框架中使用反射技术可以简化代码,提高程序的可重用性。
是关于方法类的invoke()方法。
既然是关于invoke方法,那就不说怎么用反射了。代码首先出现:
在线打包;
导入Java . lang . reflect . constructor;
导入Java . lang . reflect . invocationtargetexception;
导入Java . lang . reflect . method;
导入org . JUnit . test;
公共类Msym {
公共void测试(String[] arg){
for (String string : arg) {
system . out . println(string);
}
}
@测试
公共void demo1()引发异常{
//获取字节码对象
class msym clazz=(class msym)class . for name(' online。msym’);
//获取一个对象
constructor con=clazz . get constructor();
Msym m=(Msym)con . new instance();
String[] s=new String[]{'aa ',' bb ' };
//获取方法对象
method method=clazz . get method(' test ',String[]。类);
//调用invoke方法来调用
method.invoke(m,s);
}
}
测试将报告一个错误:
红框显示是参数错误,测试方法需要是字符串数组。我传递了一个字符串数组,为什么是错的?
让我们来看看调用方法:
invoke方法的参数,其中一个是对象类型,即调用该方法的对象,
第二个参数是可变参数类型。如何将这种可变参数类型传递给数组类型?一个是多参数。一个是数组参数。很明显,参数个数不匹配。怎么解决?
解决方法是将变量参数改为参数:
将传递的s-strong转换为对象类型
将重新打包到对象数组中。
测试它:
结果是可行的。
作者:猿梦代码
资料来源:http://www.cnblogs.com/daimajun/
关于深入分析Java反射中的invoke()方法的文章到此为止。要了解更多相关的Java invoke()内容,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。