java反射3-------------------取得方法

关于java反射的学习记录:

5.反射最大的用处就是针对于方法的操作。在反射机制里面,普通方法可以在保存对象状态的情况下进行各种操作
 * 所以在反射的操作的过程之中,必须掌握方法的调用问题
 * 在Class类里面提供有如下几个与方法有关的操作:
 * |-取得全部方法:public Method[] getMethods()
 * |-取得指定方法:public Method getMethod(...)
 * 以上两个方法里面返回的都是java.lang.reflect.Method,在Method类定义有如下几个方法:
 * |-取得方法名字:public String getName()
 * |-取得方法的参数类型:public Class<?>[] getParameterTypes()
 * |-调用指定的方法public Object invoke(Object obj,Object...args),这个很重要很重要
 *   任何方法调用时都必须有实例化对象,而后再设置参数

 * |-取得返回值类型"public Class<?> getReturnType()

//        Class<?> cls=Class.forName("com.lyt.vo.Dept");
        Method[] met=cls.getMethods();//获得全部的方法定义
//        Method[] met=cls.getDeclaredMethods();//取得本类声明的方法
//        for(int i=0;i<met.length;i++){
//            System.out.println(met[i]);
//            /**
//             * 除了dept类定义的方法,还有继承自Obejct类的方法
//             */
//        }
        //在整个Method类里面最为重要的操作哦方法只有一个:invoke(),这各可以直接反射调用方法
        //正着操作  new 一个好的设计是不应该有new的
//        Dept obj=new Dept();
//        obj.setDname("测试部");
//        System.out.println(obj.getDname());
        //缺点是:代码结构严谨、关键字new、明确指明了一个类的对象
        //反射调用   一个类必须在有一个实例化对象的情况下才能够调用类中的普通方法
//        String str="dname:测试部 |loc:北京";
//        Class<?> cls=Class.forName("com.lyt.vo.Dept");
//        Object obj=cls.newInstance();  //实例化对象
//        Method metA=cls.getMethod("setDname", String.class);
//        Method metB=cls.getMethod("getDname");
//        metA.invoke(obj, "测试部");//setter方法没有返回值
//        System.out.println(metB.invoke(obj));  //有返回值
//        String[] result=str.split("\\|");//按照竖线拆分
//        for(int i=0;i<result.length;i++){
//            String[] temp=result[i].split(":");
//            String methodName="set"+StringUtils.initcap(temp[0]);
//            Method met=cls.getMethod(methodName, String.class);
//            met.invoke(obj, temp[1]);
//        }
//        System.out.println(obj);
//        //此时代码最大的特点是避免了200次的setter方法调用,

//        //问题是定义setter类方法的Method对象的类型不只有String


package com.lyt.util;

public class StringUtils {
    public static String initcap(String str){
        if(str==null || "".equals(str)){
            return str;
        }
        if(str.length()==1){
            return str.toUpperCase();
        }else{
            return str.substring(0,1).toUpperCase()+str.substring(1);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值