方法的反射

(1)如何获取某个方法

方法的名称和参数列表才能唯一确定某个方法

(2)方法反射放操作

method.invokw(对象,参数列表);

看下面这个 demo

  1. package practice.Reflect;
  2. import java.lang.reflect.Method;
  3. /**
  4. * @Author: 言曌
  5. * @Date: 2017/11/17
  6. * @Time: 上午9:36
  7. */
  8. public class MethodDemo1 {
  9. public static void main(String args[]) {
  10. //要获取print(int,int)方法
  11. //1、要获取一个方法就是获取类的信息,要获取类的信息首先要获取类的类类型
  12. A a1 = new A();
  13. Class c = a1.getClass();
  14. /**
  15. * 2、获取方法  名称和参数列表来决定
  16. * getMethod()获取的是public的方法
  17. * getDelcaredMethod()自己声明的方法
  18. */
  19. try {
  20. //写法一
  21. //            Method m = c.getMethod("print",new Class[]{int.class,int.class});
  22. //写法二
  23. Method m = c.getMethod("print",int.class,int.class);
  24. //之前的操作,非方法的反射
  25. a1.print(10,20);
  26. //方法的反射操作,和上面a1.print效果完全相同
  27. //方法如果没有返回值,返回null,有返回值返回具体的返回值
  28. //写法一
  29. m.invoke(a1,new Object[]{10,20});
  30. //写法二
  31. m.invoke(a1,10,20);
  32. System.out.println("----------------------------");
  33. //获取方法print(String,String)
  34. Method m1 = c.getMethod("print",String.class,String.class);
  35. //用方法进行反射操作
  36. m1.invoke(a1,"hello","world");
  37. System.out.println("----------------------------");
  38. //获取方法print()
  39. Method m2 = c.getMethod("print");
  40. //用方法进行反射
  41. m2.invoke(a1);
  42. } catch (Exception e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. class A {
  48. public void print() {
  49. System.out.println("Hello World");
  50. }
  51. public void print(int a,int b) {
  52. System.out.println(a+b);
  53. }
  54. public void print(String a,String b) {
  55. System.out.println(a.toUpperCase()+","+b.toLowerCase());
  56. }
  57. }

在 A 类中有三个方法,同名但是参数不同。

平时我们要调用他们只需要

A a1 = new A();

a1.print(10,20);即可

现在我们通过反射的方式

先要获取类的类类型,然后再获取的其指定的方法

A a1 = new A();

Class c = obj.getClass();

Method m = c.getMethod("print",int.class,int.class);

m.invoke(a1);

通过反射的方式得到的结果和 a1.print() 方式是一样的。

Java 方法的反射相关推荐

  1. Java方法的反射(对反射的进一步认识)

    目录 理论 实例 理论 这是学Java反射的第三天了,今天对Java反射有了新的认识,个人觉得,Java的反射,实际上是存在一个对象的副本.这个对象的副本实际上是一个Class指针(Java里面没有指 ...

  2. Java方法反射的实现原理

    反射方面先看Java反射与动态代理 "物有本末,事有始终.知其先后,则近道矣" 前段时间看了笨神的 从一起GC血案谈到反射原理一本,就把Java方法的反射机制实现撸了一遍. 方法反 ...

  3. 深入理解Java中的反射机制和使用原理!详细解析invoke方法的执行和使用

    反射的概念 反射:Refelection,反射是Java的特征之一,允许运行中的Java程序获取自身信息,并可以操作类或者对象的内部属性 通过反射,可以在运行时获得程序或者程序中的每一个类型的成员活成 ...

  4. Java 高级特性 --- 反射

    From:Java 高级特性 --- 反射:https://www.jianshu.com/p/9be58ee20dee From:Java 基础之 --- 反射(非常重要):https://blog ...

  5. Java 中使用反射来创建对象、调用方法

    Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形   假设已有下面的类: import java.l ...

  6. 深入分析 Java 方法反射的实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 方法反射实例 public class ReflectCase { public static void main(Strin ...

  7. java測試動態方法_java反射学习

    反射的核心Class类 Class类是一个特殊的类,不能手动创建,只能由jvm来创建. jvm在类加载时会为每个类生成一个与之对应的Class对象在Java堆中(且每个类只会有一个对应的Class对象 ...

  8. JAVA反射机制、Class类及动态加载、成员变量构造方法其他方法的反射与调用、代理模式AOP

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语言 ...

  9. java反射方法_java反射之方法反射的基本操作方法

    本文接上文"java反射之获取类的信息方法(推荐)",利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ pu ...

  10. java 反射 set方法_java 反射调用set方法

    Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...

最新文章

  1. 回到顶部和返回首页jquery插件
  2. ise 时钟约束_「新手入门」ISE工程升级到Vivado及板级信号调试技术
  3. linux下dhcp配置(一)
  4. spring cloud组件服务架构
  5. 【UOJ 92】有向图的强连通分量
  6. Linux内核系统架构介绍
  7. matlab求傅里叶级数展开式_傅里叶级数:从向量的角度看函数
  8. SharePoint2010探索日志
  9. c++调用powershell_告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始
  10. 江苏省高等数学竞赛经验分享
  11. 为何耐得住寂寞更容易成功
  12. matlab蜂窝异构网络基站用户矩阵 依照最近距离配对/快速计算两矩阵彼此距离
  13. python画八卦_python编程也能八卦?
  14. android p 模拟器开启刘海模式
  15. DVWA通过攻略之SQL注入
  16. 最透彻的分析!NTC热敏电阻与浪涌电流,热启动不会失效?
  17. 采用先进先出原则对货物的库存进行处理
  18. 滴答清单(ticktick) 网页版api
  19. java suprious wakeup_多线程编程中条件变量和的spurious wakeup 虚假唤醒
  20. 基于QT(C++)实现房贷计算器【100010502】

热门文章

  1. SpringBoot结合ActiveMQ(同时支持Queue和Topic)
  2. pythonGUI-wxpython
  3. 什么是Code Review
  4. JavaScript中“基本类型”之争
  5. 公司培训笔记(1):沟通的技巧
  6. [转]Using Named Pipes (FIFOs) with Bash
  7. mac上配置rails开发环境
  8. 利用ajax如何根据权限加载目录,AJAX调用框架,包含权限验证
  9. mysql 正则 捕获_在mysql中模拟正则表达式捕获组
  10. git 查看修改明细_Git(查看修改记录)