java 使用反射调用方法
每个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<Dept> 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
相关文章
- 安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )
- java中的堆、栈和方法区
- java动态载入指定的类或者jar包反射调用其方法
- java高级用法之:无所不能的java,本地方法调用实况
- Java 方法
- Java 线程实例一(查看线程是否存活、获取当前线程名称、状态监测、线程优先级设置、死锁及解决方法、获取线程id、线程挂起)
- java基础—Date类的常见方法演示
- 剖析一个java对象初始化顺序问题
- java在Linux执行命令Java在Windows执行命令
- Java - CentOS下JDK的安装教程(及JAVA_HOME配置、以jdk1.8为例)
- 【Java】Eclipse如何创建java项目并运行
- Java反射方法总结
- 《Java编码指南:编写安全可靠程序的75条建议(英文版)》—— 2.7 修复错误
- Java RSA (SHA1withRSA)签名和验签
- java获取当前路径的几种方法
- Java反射学习总结二(用反射调用对象的私有属性和方法)
- java 使用反射调用可变参数方法
- Java通过接口或者抽象类调用方法的时候,怎么知道调用的是哪个实现类里的方法?
- JAVA_OPTS设置
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- Java 远程调试
- Java集合基础知识笔记:List集合(为什么需编写equals方法)、Map集合(equals与hashCode方法)、EnumMap好处、有顺序的TreeMap、读写配置文件Properties、Set集合(不重复的key值)与有顺序的Set、队列、优先队列、双端队列、栈、迭代器
- 『Java练习生的自我修养』java-se进阶¹ • 初识多线程
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- JAVA学习.java.sql.date 与java.util.date以及gettime()方法的分析
- JAVA开发者的Golang快速指南
- Java新手入门200例125之用C3P0连接Mysql实例
- 【JAVA】浅谈java枚举类
- Java hutool/java 常用方法
- 最简单的方法搞懂java自增(++)和自减(--)(学不会来打我)
- Java 多线程方法详解