反射机制实例化对象,调用对象的方法

反射机制实例化对象,调用对象的方法:

测试代码:

package reflect;

import java.lang.reflect.Method;

public class Test13 {
    public static void main(String[] args) throws Exception {

        // 不用反射机制调用方法
        UserService us = new UserService();
        /*
            调用方法的四要素:
                要素1:对象
                要素2:方法名
                要素3:实际参数列表
                要素4:返回值
         */
        System.out.println(us.login("admin", "abc123") ? "登录成功" : "登录失败");


        // 反射获取一个类
        Class theClass = Class.forName("reflect.UserService");

        // 实例化对象
        Object obj = theClass.newInstance();

        // 获取类中的login()方法,通过方法名,形式参数列表获取
        Method loginMethod = theClass.getDeclaredMethod("login", String.class, String.class);
        // 类中可能有同名的方法重载,只是形式参数不一样,只需要改变参数列表即可
        //Method loginMethod1 = theClass.getDeclaredMethod("login", int.class);

        // 调用对象的方法,这是反射机制中非常重要的一行代码!!!
        Object resultObj = loginMethod.invoke(obj, "admin", "abc123");
        System.out.println(resultObj);  // true
    }
}

class UserService {

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

    public void logout() {
        System.out.println("已退出!!!");
    }

    private void doSome() {
        System.out.println("doSome()方法执行!");
    }
}

猜你喜欢

转载自blog.csdn.net/pipizhen_/article/details/107605992
今日推荐