java反射机制入门3

Method对象的机制与实现

1、Method对象概述

  1)java.lang.reflect.Method类是用于表示类中、接口中方法对象的类。

  2)可以操作类中私有,以及公有等全部方法。 

2、Method对象的常用方法介绍

方法名

释义

getName()

获得方法名称

getReturnType()

获得方法返回值类型

invoke(Object obj, Object ...args)

利用obj对象调用该方法

getParameterTypes()

获取方法所有参数类型,按照顺序返回class数组

getDeclaredAnnotations()

获取方法的全部注解

package com.rainmer.main;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import com.rainmer.bean.Book;

public class MethodTest {
    //该方法用于获取对象的所有方法名称、返回值类型、以及参数信息
    public void show(Object ob){
        Class cl = ob.getClass();
        Method[] me= cl.getDeclaredMethods();
        for (Method mm : me) {
            System.out.println("方法名称:"+mm.getName());
            System.out.println("方法修饰符:"+Modifier.toString(mm.getModifiers()));
            System.out.println("方法返回值类型:"+mm.getReturnType());
            Class[] preType = mm.getParameterTypes();
            System.out.println("方法参数列表:");
            for(Class cll : preType){
                System.out.println(cll.getName());
                
            }
        }
    }
    
    //该方法用于使用传递过来的实体对象,获取其中的方法,饼调用
    public void showUse(Object ob){
        Class cl = ob.getClass();
        try {
            Method me = cl.getMethod("getName", null);
            me.invoke(ob, new Object[0]);//invoke援引,参数是长度为0的Object数组
            
            Method me1 = cl.getMethod("setName", String.class);
            me1.invoke(ob, "西游记");//ob对象调用了me1方法
            
            Class[] cll = {String.class, int.class};
            Method me2 = cl.getMethod("test", cll);
            Object[] obb = {"哈哈哈", 12};
            me2.invoke(ob, obb);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    public static void main(String[] args) {
        Book bo = new Book();
        bo.setId(1);
        bo.setName("我和凤姐同居的日子");
        bo.setType("惊悚");
        
        MethodTest test = new MethodTest();
        test.showUse(bo);
        System.out.println(bo.getName());
    }
}

运行结果:

调用了setName方法 调用了getName方法 调用了setName方法 调用了多参数的方法 调用了getName方法 西游记

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

一、动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开...

21110
来自专栏ios 技术积累

swift 函数

下面定义名称 sayHello 的函数,只有一个 String 类型的 name 参数,函数返回值为 String 类型。

1013
来自专栏nummy

JS遍历属性

对象属性可枚举,表示该属性的值不可修改,可认为该属性是常量。 如何定义不可枚举的属性?

1192
来自专栏拭心的安卓进阶之路

深入理解 Java 反射:Class (反射的入口)

深入理解 Java 反射系列: 深入理解 Java 反射:Class (反射的入口) 深入理解 Java 反射:Field (成员变量) 深入理解 Java ...

24410
来自专栏软件开发

JavaScript学习总结(四)——this、原型链、javascript面向对象

一、this 在JavaScript中this表示:谁调用它,this就是谁。 JavaScript是由对象组成的,一切皆为对象,万物皆为对象。this是一个动...

2517
来自专栏顶级程序员

Java中的反射总结

刚开始学习Java的时候真的很难理解反射到底是个什么东西 一些书籍,哪怕是很经典的书籍都解释的让人感觉懵懵的,或许的确是我太笨 况且,网上说在将来学习框架的时...

3415
来自专栏GreenLeaves

JavaScript之面向对象学习二(原型属性对象与in操作符)获取对象中所有属性的方法

1、原型属性对象于in操作符之in单独使用 有两种方式使用in操作符:单独使用和在for-in循环中使用。在单独使用中,代码如下: function Pe...

1869
来自专栏极乐技术社区

使用ES6新特性开发微信小程序(5)——内建对象的变化

Object对象 Object.prototype.proto:对象具有属性proto,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保...

2478
来自专栏LanceToBigData

JavaSE(十)之反射

开始接触的时候可能大家都会很模糊到底什么是反射,大家都以为这个东西不重要,其实很重要的,几乎所有的框架都要用到反射,增加灵活度。到了后面几乎动不动就要用到反射。...

20510
来自专栏Micro_awake web

JavaScript OOP(三):prototype原型对象(即构造函数的prototype属性)

通过构造函数生成的实例化对象,无法共享属性或方法(即每个实例化对象上都有构造函数中的属性和方法);造成了一定的资源浪费 1 function Obj(name...

2097

扫码关注云+社区