java反射之方法反射的基本操作方法
作者:jingxian 时间:2021-11-26 00:45:36
本文接上文“java反射之获取类的信息方法(推荐)”,利用反射(invoke)来获取一个类中的方法来执行。
1、定义一个类,包含三个名称相同,参数不同的方法
class A{
public void print(){
System.out.println("Hello,World");
}
public void print(int a,int b){
System.out.println(a+b);
}
public void print(String a,String b){
System.out.println(a.toUpperCase()+","+b.toLowerCase());
}
}
2、利用方法的反射(invoke)分别获取该类三个方法并执行
public class Test {
public static void main(String[] args) {
/**
* 获取print(int,int)方法
* 1、获取类的类类型
*/
A a1 = new A();
Class clazz = a1.getClass();
/**
* 2、获取方法(名称、参数列表)
* getMethod()获取的是public方法
* getDeclaredMethod()获取的是自己声明的方法
*/
try {
// Method m = clazz.getMethod("print",new Class[]{int.class,int.class});
Method m = clazz.getMethod("print", int.class, int.class);
//方法的反射操作,用m对象进行方法调用,a1.print完全相同
//方法没有返回值返回null,有返回值返回具体的返回值
// Object obj = m.invoke(a1,new Object[]{10,20});
Object obj = m.invoke(a1,10,20);
System.out.println("================================================");
Method m2 = clazz.getMethod("print", String.class, String.class);
m2.invoke(a1,"aaa","BBB");
System.out.println("================================================");
Method m3 = clazz.getMethod("print");
m3.invoke(a1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、完整代码
package com.format.test;
import java.lang.reflect.Method;
/**
* Created by Format on 2017/6/3.
*/
public class Test {
public static void main(String[] args) {
/**
* 获取print(int,int)方法
* 1、获取类的类类型
*/
A a1 = new A();
Class clazz = a1.getClass();
/**
* 2、获取方法(名称、参数列表)
* getMethod()获取的是public方法
* getDeclaredMethod()获取的是自己声明的方法
*/
try {
// Method m = clazz.getMethod("print",new Class[]{int.class,int.class});
Method m = clazz.getMethod("print", int.class, int.class);
//方法的反射操作,用m对象进行方法调用,a1.print完全相同
//方法没有返回值返回null,有返回值返回具体的返回值
// Object obj = m.invoke(a1,new Object[]{10,20});
Object obj = m.invoke(a1,10,20);
System.out.println("================================================");
Method m2 = clazz.getMethod("print", String.class, String.class);
m2.invoke(a1,"aaa","BBB");
System.out.println("================================================");
Method m3 = clazz.getMethod("print");
m3.invoke(a1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class A{
public void print(){
System.out.println("Hello,World");
}
public void print(int a,int b){
System.out.println(a+b);
}
public void print(String a,String b){
System.out.println(a.toUpperCase()+","+b.toLowerCase());
}
}
4、执行结果
标签:java,反射,方法
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MapTask工作机制图文详解
2021-12-13 11:03:27
![](https://img.aspxhome.com/file/2023/1/65771_0s.png)
Java实现三子棋小游戏
2022-09-12 01:27:20
android Gallery组件实现的iPhone图片滑动效果实例
2022-09-27 06:38:17
![](https://img.aspxhome.com/file/2023/6/99786_0s.jpg)
用Java设计模式中的观察者模式开发微信公众号的例子
2023-01-17 05:30:58
![](https://img.aspxhome.com/file/2023/5/88045_0s.jpg)
C#泛型委托的用法实例分析
2021-09-16 23:29:52
![](https://img.aspxhome.com/file/2023/9/92909_0s.jpg)
SpringBoot中shiro过滤器的重写与配置详解
2021-07-28 23:40:09
解决Java调用BAT批处理不弹出cmd窗口的方法分析
2022-03-09 17:34:02
一篇文章带你Java Spring开发入门
2021-06-25 10:04:15
![](https://img.aspxhome.com/file/2023/4/62724_0s.png)
Java注解方式之防止重复请求
2023-05-29 16:30:51
![](https://img.aspxhome.com/file/2023/1/82981_0s.jpg)
Spring Cloud之服务监控turbine的示例
2023-04-20 23:26:44
Python安装Jupyter Notebook配置使用教程详解
2023-08-31 02:52:03
![](https://img.aspxhome.com/file/2023/2/92722_0s.jpg)
Java自定义注解用法实例小结
2023-03-26 09:13:51
深入分析C# Task
2022-10-24 12:39:00
Android模块化中数据传递/路由跳转实现示例
2023-06-29 03:12:06
java 文件上传到读取文件内容的实例
2023-11-09 22:00:27
SpringBoot实现文件上传与下载功能的示例代码
2021-11-10 09:15:32
Javaweb会话跟踪技术Cookie和Session的具体使用
2022-06-24 21:16:33
![](https://img.aspxhome.com/file/2023/7/73077_0s.png)
Spring Boot示例分析讲解自动化装配机制核心注解
2022-07-26 15:56:14
![](https://img.aspxhome.com/file/2023/0/62170_0s.png)
SpringBoot全局Controller返回值格式统一
2022-09-12 14:07:52
![](https://img.aspxhome.com/file/2023/7/122307_0s.png)
idea如何配置javafxsdk详细教程
2023-11-24 22:04:16
![](https://img.aspxhome.com/file/2023/3/59603_0s.jpg)