JAVA反射:调用Method方法,该方法抛出异常,捕获该异常

说明

在 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() 方法获取 实际的异常


原文出处:/show_1IX73Hzt0d98.html