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);
}
}