想想这个示例代码:
...
try {
stm1
stm2
stm3
} catch(){
...
}
...
假设运行代码并在 try 块内引发异常。执行流程进入 catch 块。
在这里,我想复制 try 块的字节码(可能使用 ASM),对字节码进行一些修改(例如用 stm4 替换 stm2)并在 catch 块中执行新的字节码。
这是否可能不编译或加载新的字节码,而只是像解释语言一样执行它?
谢谢!
更新
我知道我可以先验地编写正确的代码。问题不是为什么,而是如何做到这一点以及是否可能。
假设我必须动态计算新的 try 主体,并且我必须在同一个对象中执行新代码(因为局部变量和类变量。)