java如果方法是用invoke启动的,异常不会导致崩溃
出于某种原因,如果通过invoke()
调用方法,则它抛出的未捕获异常不会导致崩溃。但是,它确实退出了该方法。invoke
是否运行另一个线程(因为异常只是使线程崩溃,对吗?),如果是这样的话,有没有一种方法可以发送异常或其他什么
下面是一个简单的例子:
import java.lang.reflect.InvocationTargetException;
public class Main {
public static void main(String[] args) {
try {
Class.forName("Main").getMethod("thrower").invoke(null);
}
catch (IllegalAccessException e) {}
catch (IllegalArgumentException e) {}
catch (ClassNotFoundException e) {}
catch (NoSuchMethodException e) {}
catch (InvocationTargetException e) {}
catch (SecurityException e) {}
}
public static void thrower() {
throw new RuntimeException();
}
}
# 1 楼答案
从^{} 文档:
您正在捕获一个^{} ,它将被抛出^{} 原因:
# 2 楼答案
它不是在单独的线程中运行的。从
thrower
抛出的RuntimeException
实际上在反射调用期间被InvocationTargetException
包装,稍后被不做任何操作的代码捕获有关InvocationTargetException的信息,请参见Javadoc