java 中 invoke()的作用是什么?

 我来答
硅谷创业快讯
高粉答主

推荐于2019-11-07 · 每个回答都超有意思的
知道答主
回答量:55
采纳率:100%
帮助的人:1.7万
展开全部

invoke(调用)就是调用Method类代表的方法。可以实现动态调用,例如可以动态的传人参数,可以把方法参数化。

可以把方法参数化invoke(class, method),比如Test类里有一系列名字相似的方法setValue1、setValue2等等,可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue。

此外,invoke()对带有指定参数的指定对象调用,个别参数被自动解包,与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。如下

public Object invoke(Object obj,Object... args)

throws IllegalAccessException,

IllegalArgumentException,

InvocationTargetException

如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。

如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。

如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。

如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。

如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。

扩展资料:

语言特点

1.简单性

Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。

2.分布性

Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。

网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。

3.编译和解释性

Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。

参考资料来源:oracle官网——Class Method( invoke()见底部)

随性亻
推荐于2017-09-28 · TA获得超过4180个赞
知道小有建树答主
回答量:4622
采纳率:84%
帮助的人:547万
展开全部
就是调用类中的方法,最简单的用法是可以把方法参数化
invoke(class, method)
比如你Test类里有一系列名字相似的方法setValue1、setValue2等等
可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
过来人啊啊啊
2019-12-23 · TA获得超过371个赞
知道答主
回答量:243
采纳率:0%
帮助的人:11.5万
展开全部
invoke(调用)就是调用Method类代表的方法。可以实现动态调用,例如可以动态的传人参数,可以把方法参数化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a4829201
2012-03-14 · TA获得超过159个赞
知道答主
回答量:142
采纳率:0%
帮助的人:118万
展开全部
用来执行一个方法,是反射中知识
追问
有什么好的实例没有?发我邮箱吧1176628945@qq.com
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shenda62081505
2019-10-11
知道答主
回答量:1
采纳率:0%
帮助的人:614
展开全部
public class Test {

private String value0;
private String value1;
private String value2;

public String getValue0() {
return value0;
}
public void setValue0(String value0) {
this.value0 = value0;
}
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
public String getValue2() {
return value2;
}
public void setValue2(String value2) {
this.value2 = value2;
}

}

public class invoke {

public static void main(String[] args) throws Exception {

Test test = new Test();
for (int i = 0;i < 3;i++) {

//Class对象
Class[] cls = new Class[1];
String value = String.format("it is value%s", i);
cls[0] = value.getClass();
Method md = test.getClass().getMethod(String.format("setValue%s" ,i) ,cls);

//参数对象
Object[] obj = new Object[1];
obj[0] = String.format("it is value%s", i);
md.invoke(test, obj);
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式