zoukankan      html  css  js  c++  java
  • 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方法
    西游记

  • 相关阅读:
    LinkedList源码解析
    HashMap源码解析
    HashMap和Hashtable区别
    arcgis api for js 之网络分析服务发布
    arcgis api for js 之发布要素服务
    arcis api for js 值 3.17 本地部署
    ArcGIS 产品体系结构
    layui select下拉框选项不显示
    windows10企业版2016长期服务版激活
    PHP常见的输出语句
  • 原文地址:https://www.cnblogs.com/rainmer/p/4665394.html
Copyright © 2011-2022 走看看