这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面。

1,获得一个类中的方法

先看一下方法和运行结果。获取所有的方法使用Class类中getMethos()方法。

待获取的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.aaron.reflect;
public class Heros {
    private String name;//名字
    private String type;//类型
    private int camp;//0,近卫;1,天灾
     
    public Heros(){}
    public Heros(String name, String type, int camp) {
        super();
        this.name = name;
        this.type = type;
        this.camp = camp;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public int getCamp() {
        return camp;
    }
    public void setCamp(int camp) {
        this.camp = camp;
    }
    @Override
    public String toString() {
        return "Heros [\n name=" + name + ", \n type=" + type + ", \n camp=" + camp + "\n]";
    }
     
}

  Hero类中包含了三个属性,和对应的getter和setter方法。另外还有一个toString方法。这是一个非常常见的pojo。

测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.aaron.reflect;
import java.lang.reflect.Method;
public class Demo5 {
    public static void main(String[] args) {
        Class<?> herosClass = Heros.class;
        Method[] methods = herosClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
    }
}

理论上,我们会获得所有的getter和setter,然后还有toString方法

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void com.aaron.reflect.Heros.setType(java.lang.String)
public int com.aaron.reflect.Heros.getCamp()
public void com.aaron.reflect.Heros.setCamp(int)
public java.lang.String com.aaron.reflect.Heros.toString()
public java.lang.String com.aaron.reflect.Heros.getName()
public void com.aaron.reflect.Heros.setName(java.lang.String)
public java.lang.String com.aaron.reflect.Heros.getType()
public final void java.lang.Object.wait(long,intthrows java.lang.InterruptedException
public final native void java.lang.Object.wait(longthrows java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()

然而却列出了这么一大堆。

仔细看一下返回的方法,原来把Object类所拥有的方法也返回了。因为我们这个POJO类默认继承的是java.lang.Object类。,例如getClass(),equals()这些。

使用getMethods()这个方法,返回了一个包含某些Method对象的数组,Method对象已经介绍过,用来表示一个方法的对象,是对类中方法进行抽象的结果。

这些对象反映了Class对象所表示的类或者接口,当然,包括那些由该类或者接口声明的以及从超类和超接口继承的那些类或接口。举个例子来解释一下:

例如使用getMethods()获得Integer类的方法,会把Integer的父类,Number的所有方法,以及Number的父类Object的方法都获取出来。

这个返回数组,包括了从Object类继承的所有(公共)member方法。返回数组中的元素没有排序。如果这个Class对象表示没有公共成员方法的类或者接口,或者表示了一个基本类型或者表示void,则返回长度为0的数组。

2,调用类中的方法

直接给出一个Demo,注意参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.aaron.reflect;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo5 {
    public static void main(String[] args) {
        Class<?> herosClass = Heros.class;
        try {
            Method m1 = herosClass.getMethod("setName",String.class);
            Method m2 = herosClass.getMethod("getName");
            Object userInfo = herosClass.newInstance();
            m1.invoke(userInfo,"影魔");
            System.out.println("调用set方法:"+userInfo);
            System.out.println("调用get方法:"+m2.invoke(userInfo));
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果:

1
2
3
4
5
6
7
8
调用set方法:
Heros [
 name=影魔,
 type=null,
 camp=0
]
调用get方法:
影魔

  

  

  

转载于:https://www.cnblogs.com/telwanggs/p/7418883.html

Java反射机制demo(五)—获得并调用一个类中的方法相关推荐

  1. Java反射机制demo(四)—获取一个类的父类和实现的接口

    2019独角兽企业重金招聘Python工程师标准>>> Java反射机制demo(四)-获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的get ...

  2. java 引用其他类_java如何调用其他类中的方法?

    1.java如何调用其他类中的方法 java调用另一个类的方法: java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修饰的方法.类方法可以同时类名,方法名的 ...

  3. java---解析XML文件,通过反射动态将XML内容封装到一个类中

    本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...

  4. python调用其他类中的方法_无法调用其他类中的方法

    以下是页面对象文件:登录名.py在from pages.base import BasePage from config import secrets from selenium.webdriver. ...

  5. Java反射机制Reflection

    Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...

  6. java 反射 工厂模式_Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)-反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  7. java反射机制的调用

    这次在项目中用到了java的反射机制,没办法然后找狗哥找了一堆的东东出来,随便整理了下,记录之 : *_*!!!!!!!!!!! 在开始之前,我先定义一个测试类Student,代码如下: packag ...

  8. Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    文章目录 前言 一.私有方法在本类中直接调用 1.1.在本类中实例化,调用私有方法 1.2.尝试在其他类直接调用私有方法(错误示范) 二.使用反射实例化类强制调用私有方法 2.1.使用类加载器加载被调 ...

  9. Java基础——Java反射机制及IoC原理

    一.概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义.在java中,只要给定类的名字, 那么就可以通过反射机制 ...

最新文章

  1. usaco Home on the Range
  2. 萌宝1天陪博士父母赶2场毕业典礼走红!上午是妈妈博士毕业,下午是爸爸......
  3. 如何用c语言打出 * * * * * * * * * * * * *?
  4. 谷歌AI公布新项目:未来你的宠物可能真的会是“机器”狗!
  5. ArcGIS Engine10.4版本
  6. MIT自然语言处理第三讲:概率语言模型
  7. php常量定义表达式,从表达式创建PHP类常量的最佳解决方法?
  8. java 判断int是几位_快速判断一个int值是几位数
  9. 遗传所屠强研究组开发Decode-seq方法显著提高差异表达基因分析的准确性
  10. SQL精选习题及解答
  11. 初学编程者如何摆脱搭建开发环境的困扰?
  12. In App Purchases 入门
  13. iOS CocoaPods自动管理第三方开源库
  14. 调试工具之UDP/TCP网络调试助手NetAssist
  15. html静态网页实例一(附完整代码)
  16. 基于exchange 2010迁移exchange 2016搭建共存环境
  17. 【货干】Idea 安装 MyBatis 插件
  18. Word:表格中绘制斜线表头
  19. 酷开u盘c02hb量产工具
  20. 浙大何越扬计算机系2 2,浙江大学第十一届大学生数学建模竞赛获奖名单.doc

热门文章

  1. PowerPC处理器数字仿真测试软件工具——天目全数字实时仿真软件SkyEye
  2. (12)Verilog HDL变量:reg型
  3. FPGA复位激励编写(方法一)
  4. platform_driver_register()--如何match之后调用probe
  5. linux下的网桥介绍
  6. typeof关键字简介
  7. QT开发及实例学习之六控件
  8. java corba_Java编写CORBA的一个简单例子(CORBA入门)
  9. shiro利用mysql动态授权_SpringBoot+Shiro学习之数据库动态权限管理和Redis缓存
  10. 【小项目】Axios 实现前后端交互