java反射机制

方法四要素

不使用反射机制调用一个方法需要几个要素的参与?

例:
SystemService.java

package com.w.spring6.reflection;

public class SystemService {

    public void logout(){
        System.out.println("退出系统");
    }

    public boolean login(String username, String password){
        if ("admin".equals(username) && "123".equals(password)) {
            return true;
        }
        return false;
    }
}

编写程序调用方法:
ReflectTest01.java

package com.w.spring6.reflection;

public class ReflectTest01 {

    public static void main(String[] args) {

        // 创建对象
        SystemService systemService = new SystemService();

        // 调用方法并接收方法的返回值
        boolean success = systemService.login("admin", "123");

        System.out.println(success ? "登陆成功" : "登录失败");

    }

}

运行结果:
在这里插入图片描述
通过上面例子可以看出,调用一个方法,一般涉及到4个要素:
调用哪个对象的(systemService)
哪个方法(login)
传什么参数(“admin”, “123”)
返回什么值(success)

使用反射机制获取方法并调用方法

SystemService.java

package com.w.spring6.reflection;

public class SystemService {

    public void logout(){
        System.out.println("退出系统");
    }

    public boolean login(String username, String password){
        if ("admin".equals(username) && "123".equals(password)) {
            return true;
        }
        return false;
    }

    public boolean login(String password){
        if("117".equals(password)){
            return true;
        }
        return false;
    }

}

接下来获取到 logout()、login(String,String)、login(String) 这三个方法,并调用它们

测试程序:
ReflectTest02.java

package com.w.spring6.reflection;

import java.lang.reflect.Method;

public class ReflectTest02 {
        public static void main(String[] args) throws Exception{
            //创建对象
            Class clazz = Class.forName("com.w.spring6.reflection.SystemService");
            Object obj = clazz.newInstance();
            //获取方法login(String,String)
            Method loginMethod = clazz.getDeclaredMethod("login", String.class, String.class);
            //调用方法
            Object retValue = loginMethod.invoke(obj, "admin", "123");
            System.out.println(retValue);
        }

//        //创建对象
//        Class clazz = Class.forName("com.w.spring6.reflection.SystemService");
//        Object obj = clazz.newInstance();
//        //获取方法login(String,String)
//        Method loginMethod = clazz.getDeclaredMethod("login", String.class);
//        //调用方法login(String)
//        Object retValue = loginMethod.invoke(obj, "117");
//        System.out.println(retValue);

}

在这里插入图片描述
ReflectTest03.java

package com.w.spring6.reflection;

import java.lang.reflect.Method;

public class ReflectTest03 {
    public static void main(String[] args) throws Exception{
        //创建对象
        Class clazz = Class.forName("com.w.spring6.reflection.SystemService");
        Object obj = clazz.newInstance();
        //获取方法login()
        Method logoutMethod = clazz.getDeclaredMethod("logout");
        //调用无参方法
        logoutMethod.invoke(obj);

    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值