网站首页 > 技术文章 正文
每个Method的对象对应一个具体的底层方法。获得Method对象后,程序可以使用Method里面的invoke方法来执行该底层方法。
Object invoke(Object obj,Object ... args):obj表示调用底层方法的对象,后面的args表示传递的实际参数。
如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null,想想为什么?
如果底层方法所需的形参个数为 0,则所提供的 args 数组长度可以为 0 或 null。
不写,null,或 new Object[]{}
若底层方法返回的是数组类型,invoke方法返回的不是底层方法的值,而是底层方法的返回类型;
package junereflect624;
import java.lang.reflect.Method;
class Dept{
public String show(String name){//用反射的方法来调用正常的方法
return name+",您好!";
}
private void privateshow(){//用反射来实现对私有化方法的调用
System.out.println("privateshow");
}
public static void staticshow(){
System.out.println("staticshow");
}
}
public class InvokeDemo9 {
public static void main(String[] args) throws Exception {
/* 传统方式:
String name = new Dept().show("张三");
System.out.println(name);*/
/**
* Method getMethod(String name, Class>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
name-方法名
parameterTypes-参数列表
*/
//想要通过反射来调用Dept中的方法
Class c = Dept.class;
Method m = c.getMethod("show", String.class);
Object o = m.invoke(c.newInstance(), "刘昭");
System.out.println(o);
//私有化的方法
m = c.getDeclaredMethod("privateshow");//无参方法
m.setAccessible(true);
o = m.invoke(c.newInstance());
//静态方法的调用
m = c.getMethod("staticshow");
m.invoke(null);//staticshow为静态方法,不需创建对象,所以这里会是null
}
}
打印
张三,您好!
privateshow
staticshow
- 上一篇: 详解 Java 中的变量
- 下一篇: Java避坑指南——高并发场景下的性能隐藏杀手“UUID”
猜你喜欢
- 2024-12-13 Set的用法和实例详解——Java进阶知识讲义系列(五)
- 2024-12-13 阿里Java三面:分布式延时任务方案解析,万字长文一篇点通你
- 2024-12-13 Java快速处理图片的方式(总结)
- 2024-12-13 Java八股文面试全套真题【含答案】-反射篇
- 2024-12-13 java 如何一行代码生成随机数据?
- 2024-12-13 Java避坑指南——高并发场景下的性能隐藏杀手“UUID”
- 2024-12-13 详解 Java 中的变量
- 2024-12-13 Java面试题:Java代理的几种实现方式?
- 2024-12-13 详解Java中的静态代理和动态代理
- 2024-12-13 9分钟带你搞懂代理模式、静态代理、JDK+CGLIB动态代理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)