java反射机制

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 ? "登陆成功" : "登录失败");

    }

}

运行结果:
java反射机制_第1张图片
通过上面例子可以看出,调用一个方法,一般涉及到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);

}

java反射机制_第2张图片
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);

    }
}

java反射机制_第3张图片

你可能感兴趣的:(java,java,开发语言,后端)