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”时,不会调用异常中的任何方法。
我们必须更深入。
解决方案
将其全部包装在另一个 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 块中。
但是如果你真的想让异常被捕获两次,则在构造函数中抛出外部异常,所以你只想依赖一个方法。
推荐阅读
- html - iframe代码在不知不觉中隐藏后的Div - 三列布局页面
- html - Rmarkdown 在循环中,“knit html”按钮的输出与 rmarkdown::render 不同
- python - Python - 如果文本中存在字符串,则获取概率/百分比值
- regex - 自定义信用卡正则表达式
- jsp - 在 jsp 中解析 ZonedDateTime - 要使用哪个标签?
- c# - Visual Studio 扩展中的 RoslynPad FileNotFoundException
- c# - 反编译 .NET 程序集只显示 throw null;
- ruby-on-rails - Rails:使用 Devise 创建用户后,设置用户的个人资料
- php - 无法从选项值获取 html 数据
- node.js - 长期使用的前端项目框架中的巨大 Node/NPM 崩溃