Java反射-调用方法
调用方法与访问字段类似,
- 通过
Class实例
的方法获得Method实例
getMethod()、getDeclaredMethod()、getMethods()、getDeclaredMethods()(这里的方法与获得Field字段的时候的用法是一致的) - 通过
Method实例
可以获得有关方法的信息 getName()、getReturnTypes()、getParameterTypes()、getModifiers() (方法的名字、返回类型、参数类型、修饰符) - 通过
Method实例
调用某个对象的方法invoke()
函数
1、通过Method实例
调用某个对象的方法
invoke()方法的例子
package reflect;
import java.lang.reflect.Method;/*** @className:GetMethod;* @time:2022-05-17-21:04;* @author:Lee Ye;* @description:这是一个java示例;*/
public class GetMethod {public static void main(String[] args) throws Exception{String s1 = "Hello Java";String t1 = s1.substring(6);System.out.println(t1);System.out.println("-------------测试通过反射调用方法-----------");String s2 = "Hello world";//getMethod 需要传入两个参数,一个是方法名,另一个是该方法名需要的参数类型,//getMethod 的返回值是Method对象//substring 有两个重载方法, substring(int begin)、substring(int begin, int end)Method m1 = s2.getClass().getMethod("substring", int.class);Method m2 = String.class.getMethod("substring", int.class, int.class);// invoke 是Method对象中的一个调用方法的方法,返回值是 Object 类型,下面做了强制转换// invoke 第一个参数是 对象实例, 后面跟着的是可变参数,参数类型要与上面getMethod方法对应String t2 = (String)m1.invoke(s2, 6);String t3 = (String)m2.invoke(s2, 3, 6);System.out.println(t2);System.out.println(t3);}
}
2、调用静态方法
主要特殊的地方在无需指定实例对象
,在invoke的第一个参数为null值
//Main方法里面的内容System.out.println("----------测试通过反射调用静态方法----------");Method m3 = Integer.class.getMethod("parseInt", String.class);Integer t4 = (int)m3.invoke(null, "1234");System.out.println(t4);System.out.println(t4.getClass().toString());
3、调用非public方法
涉及到非public的修饰的方法,通过设置访问权限之后来调用,Method.setAccessible(true);
//Main方法里面的内容System.out.println("------------测试访问非public方法-----------");Per p = new Per();//注意无参数的参数为nullMethod m4 = p.getClass().getDeclaredMethod("Print",null);m4.setAccessible(true);Object obj = m4.invoke(new Per(), null);//System.out.println(obj);class Per{private void Print(){System.out.println("成功调用非public方法");}
}
4、多态
遵循着 编译看左边,运行看右边
的原则,虽然获取的是 Per 中的方法,但是实际执行看的还是 Stu 中的方法
//Main里面的内容System.out.println("------------测试多态-----------");Method m5 = p.getClass().getDeclaredMethod("Echo");Object obj2 = m5.invoke(new Stu(), null);class Per{private void Print(){System.out.println("成功调用非public方法");}public void Echo(){System.out.println("Per:Hello");}
}
class Stu extends Per{@Overridepublic void Echo(){System.out.println("Stu:Hello");}
}
Java反射-调用方法相关推荐
- java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作
我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作.那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息.所以,反射的第一步就是得 ...
- Java 反射调用方法实例,动态动用方法实例
包结构 Hello.java package test;public class Hello {public double add (double score1, double score2){ret ...
- 利用java反射调用类的的私有方法
http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...
- 利用java反射调用类的的私有方法--转
原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...
- java中如何使用反射调用方法以及获得类中的属性
使用反射获取类中的方法: 1):获取方法所在类的字节码对象. 2):获取方法. ------------------------------------------------------------ ...
- 【Java】Java反射调用可变参数的方法
文章目录 1.概述 1.概述 因为要Java反射调用可变参数的方法,所以参考了这篇文章:https://www.cnblogs.com/huqingchen/p/5979936.html 但是测试过程 ...
- java 反射 set方法_java 反射调用set方法
Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...
- 关于反射调用方法的一个log
[Loaded sun.reflect.GeneratedMethodAccessor197 from __JVM_DefineClass__] 请问报这个是什么意思? 这是Sun实现的Java标准 ...
- .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)...
大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能:这些问题却没有统一的描述. 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议.为了解决反射的性能问题,你可以 ...
最新文章
- ios 折线图_《解神者》ios和安卓互通吗 ios和安卓互通分析
- 安装 esl php 模块,ESL系统的Docker化部署
- 让你的JS代码更具可读性
- pandas中的括号索引
- php stripslashes 去除反斜线
- 计算机中函数counta表示,excel中counta函数的使用方法
- 《大数据》第1期“论坛”——对大数据国家战略的几点考虑
- 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...
- git创建仓库,并提交代码(第一次创建并提交)(转)
- c语言开发独立游戏,游戏项目一:c语言实现三子棋
- 有一动态生成的TABLE,当点击该TABLE中的按钮时,如何得到该按钮所在行的某一列的值啊?...
- 重装64位WIN7之后再装KUBUNTU遇到的问题
- axios传参 后台接收为空
- 浏览器之硬件加速机制
- 古代小说鉴赏辞典 - 郭子仪
- 数据结构课程设计 重言式判别
- Unity热更新机制
- 计算机桌面上常见的图标有,win10白图标修复的方法是什么_win10电脑桌面图标显示白色方块的解决方法-系统城...
- 社会管理网格化 源码_威县方家营镇创新“网格化”管理模式,助推乡村社会治理能力提升...
- 项目经理面试时常见的18个问题及回答技巧
热门文章
- Android_ScaleGestureDetector多点触控
- 计算机科学的读书报告,《计算机读书报告》.doc
- 判断一个链表中是否有环
- 1、webpack学习
- webpack基础学习,各个loader和plugin的具体配置
- 论文阅读【异常检测】ModelCoder: A Fault Model based Automatic Root Cause Localization Framework for Microservi
- HDU 2155 小黑的镇魂曲
- Al+行业正在聚焦多元化的应用场景 为人工智能发展提供巨大空间
- js获取网页文档的各种高度和宽度
- 基于JSP的健身俱乐部会员管理系统的设计与实现(论文+PPT+源码)