java反射-Method 反编译Method

UserService类

package com.wenqidao.service;

/*
    @author wenqidao
    @date 2021/2/15 19:55
*/
public class UserService {

    // 登录系统的方法
    public boolean login(String name, String password) {
        // 方法体
        if ("admin".equals(name) && "mm123".equals(password)) {
            return true;
        }
        return false;
    }

    // 退出系统的方法
    public void logout() {
        // 方法体
        System.out.println("系统已经安全退出!");
    }

    // 登录系统的方法重载
    public String login(int id) {
        // 方法体省略;
        return "aaa";
    }


}


ReflectUserService类

package com.wenqidao.test;

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

/*
    @author wenqidao
    @date 2021/2/15 19:59
*/
public class ReflectUserService {
    public static void main(String[] args) throws Exception {
        System.out.println("----------------------------------------------------------------------");
        // 获取整个Student类
        Class clazz = Class.forName("com.wenqidao.service.UserService");

        // 获取所有的成员方法-Methods
        Method[] methods = clazz.getDeclaredMethods();

        // 结果
        System.out.println(methods.length);  // 3
        System.out.println(methods[0]); // public boolean com.wenqidao.service.UserService.login(java.lang.String,java.lang.String)
        //System.out.println(methods[1]); // public void com.wenqidao.service.UserService.logout()
        //System.out.println(methods[2]); // public java.lang.String com.wenqidao.service.UserService.login(int)

        System.out.println("----------------------------------------------------------------------");
        //methods[0] 比如:public boolean login(String name, String password)
        // 1.方法的权限修饰符 getModifiers
        System.out.println(methods[0].getModifiers()); // 1
        System.out.println(Modifier.toString(methods[0].getModifiers())); // public

        // 2.方法的返回值类型 getReturnType
        System.out.println(methods[0].getReturnType()); // boolean
        System.out.println(methods[0].getReturnType().getSimpleName()); // boolean

        // 3.方法的方法名
        System.out.println(methods[0].getName()); // login

        // 4.方法的参数列表(形参)
        System.out.println(methods[0].getParameters()); // [Ljava.lang.reflect.Parameter;@5cad8086
        Parameter[] parameters = methods[0].getParameters();
        System.out.println(parameters.length); // 2
        for (Parameter parameter : parameters) {
            System.out.println(parameter.getName());
            System.out.println(parameter.getType());
        }
        /*
            arg0
            class java.lang.String
            arg1
            class java.lang.String
        */

        System.out.println(methods[0].getParameterTypes()); // [Ljava.lang.Class;@6e0be858
        Class[] parameterTypes = methods[0].getParameterTypes();
        System.out.println(parameterTypes.length);  // 2
        for (Class parameterType : parameterTypes) {
            System.out.println(parameterType.getSimpleName());
        }
        /*
            String
            String
        */

        System.out.println("----------------------------------------------------------------------");
        //methods[2] 比如:public String login(int id)
        // 1.方法的权限修饰符 getModifiers
        System.out.println(methods[0].getModifiers()); // 1
        System.out.println(Modifier.toString(methods[0].getModifiers())); // public

        // 2.方法的返回值类型 getReturnType
        System.out.println(methods[0].getReturnType()); // class java.lang.String
        System.out.println(methods[0].getReturnType().getSimpleName()); // String

        // 3.方法的方法名
        System.out.println(methods[0].getName()); // login

        // 4.方法的参数列表(形参)
        System.out.println(methods[0].getParameters()); // [Ljava.lang.reflect.Parameter;@5cad8086
        Parameter[] parameters2 = methods[0].getParameters();
        System.out.println(parameters2.length); // 1
        for (Parameter parameter : parameters2) {
            System.out.println(parameter.getName());
            System.out.println(parameter.getType());
        }
        /*
            arg0
            int
        */

        System.out.println(methods[0].getParameterTypes()); // [Ljava.lang.Class;@6e0be858
        Class[] parameterTypes3 = methods[0].getParameterTypes();
        System.out.println(parameterTypes3.length);  // 1
        for (Class parameterType : parameterTypes3) {
            System.out.println(parameterType.getSimpleName());
        }
        /*
            int
        */
    }
}


运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值