说明
在 JAVA Method 文中,知道如何反射方式调用方法
但是,如果该方法抛出异常,又该如何捕获?
如: 登录失败抛出异常,反射调用时,如何获取该异常?
案例
登录类
public class Login {
public void login(String username,String password) throws Exception {
if("admin".equals(username) && "123456".equals(password)){
// 表示登录成功,此处无操作
}else{
throw new Exception("无此用户或密码不正确!");
}
}
}
主类
主类通过反射方式调用登录方法
package test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
Class<?> loginClass = Class.forName("test.Login");
Object loginObject = loginClass.newInstance();
Method loginMethod = loginClass.getMethod("login", String.class, String.class);
try {
loginMethod.invoke(loginObject, "李雷", "123456");
}catch (InvocationTargetException e){
/*
当反射方式调用方法时,如果该方法抛出的异常,
是抛 InvocationTargetException 异常,然后通过 getCause() 方法获取实际的异常
*/
Throwable cause = e.getCause();
System.out.println(cause.getMessage());
}
}
}
关键:反射调用 login() 方法时,当该方法抛出异常,是抛出 InvocationTargetException 异常,然后通过 getCause() 方法获取 实际的异常