java.lang.reflect.InvocationTargetException
时间: 2023-10-12 18:19:51 浏览: 260
java.lang.reflect.InvocationTargetException是Java反射机制中的异常类型之一,当使用反射机制调用某个方法或构造器时,如果被调用的方法或构造器内部抛出了异常,那么反射机制将会把这个异常包装成InvocationTargetException并返回给调用者。
通常情况下,我们可以通过调用Throwable.getCause()方法获取原始异常。
举个例子,假设我们有一个类Person,其中存在一个私有方法setName(String name),我们可以使用反射机制调用这个私有方法,代码如下:
```
public static void main(String[] args) throws Exception {
Person person = new Person();
Method method = Person.class.getDeclaredMethod("setName", String.class);
method.setAccessible(true);
method.invoke(person, "Tom");
}
```
如果在setName方法内部抛出了异常,比如NullPointerException,那么反射机制将会把这个异常包装为InvocationTargetException并抛出,我们需要捕获这个异常并处理:
```
public static void main(String[] args) {
try {
Person person = new Person();
Method method = Person.class.getDeclaredMethod("setName", String.class);
method.setAccessible(true);
method.invoke(person, null);
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
if (cause instanceof NullPointerException) {
System.out.println("姓名不能为空");
} else {
System.out.println("其他异常:" + cause.getMessage());
}
} catch (Exception e) {
System.out.println("其他异常:" + e.getMessage());
}
}
```
在上面的代码中,我们首先捕获了InvocationTargetException,然后再通过getCause()方法获取原始异常,并根据不同的异常类型进行处理。
阅读全文