太多的咖啡因导致了这一点。是的,你可以抓住它,但开玩笑说。
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'时,不会调用异常中的任何方法。
我们必须更深入。
将它全部包装在另一个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块中使用此异常。
但是如果你真的想让异常被两次抛出,那么在构造函数中抛出异常异常,这样你就可以只依赖一个方法。