反射机制实例化对象,调用对象的方法:
测试代码:
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()方法执行!");
}
}