拦截捕获到的异常

时间:2019-02-22 10:06:55

标签: java

咖啡因过多导致了这种情况。是的,您实际上可以抓住它,但是开个玩笑。

public class GreasedUpDeafGuy extends RuntimeException {

    public GreasedUpDeafGuy() {
        super("You Can't Catch Me!");
    }

    @Override
    public void printStackTrace() {
        throw this;
    }
}

纯粹作为思想实验,有什么方法可以吸引到“追赶者”吗?

try {
    throw new GreasedUpDeafGuy(); // This line itself is creepy
}
catch(GreasedUpDeafGuy e) {} // <-- How could one hook in to this call? 

这样一个狡猾的开发人员可以继续抛出该异常?一位朋友建议可以使用堆栈构建进行拦截,但我们不知道如何进行。人们以为Java可以保护自己免受这种愚蠢之苦,但我的目标是成为我所能成为的最大白痴。

我不建议Exception类本身可以做到这一点。调用“ catch”时,不会调用异常中的任何方法。

我们必须更深入。

1 个答案:

答案 0 :(得分:-1)

将其包装在另一个try catch块中,例如:

try
{

try
{
     // more caffeine stuff
}catch(GreasedUpDeafGuy inner){inner.printStackTrace();}
}catch(GreasedUpDeafGuy outter){
 for (StackTraceElement stackTraceElement : outter.getStackTrace()) {
            System.out.println(stackTraceElement.toString());
        }}

并且似乎在这种情况下放了很多方法,只能在catch块中使用此异常。

但是如果您真的想使异常被捕获两次,则在构造函数中抛出外部异常,因此您只需要依赖一个方法即可。