我注意到当finally
java代码中有子句时,总是会.catchall
生成识别finally
块或使用.catchall
标签内联它,但我没有找到任何关于是否是case或更多解释的在线信息,有人知道吗这个?
问问题
683 次
2 回答
4
是的,finally 块是可能生成 .catchall 的一种情况。但是,它也可以用于其他事情。例如,也可以在同步方法的情况下生成,保证锁被释放。
catch all 处理程序记录在dex 格式规范中。具体来说,在 code_item 中包含的 encoded_catch_handler 项中。
同样相关的是类文件规范中的等效数据。请参阅异常表中的 catch_type 项。
于 2012-12-29T06:46:43.347 回答
3
我想你可能期望太高了。
您要问的是(实际上)davlik 代码生成器/翻译器的代码生成模式。根据我的经验,人们不会详细描述编译器/代码生成器在幕后所做的事情:
- 这些行为不需要指定。实际上,规范可能会通过过度约束实现来造成伤害。
- 这样的文档编写和维护成本很高。
- 这样的文件将没有多少读者来证明费用的合理性。
我建议你查看 davlik 翻译器的源代码,看看它实际上做了什么。(尝试寻找“catchall”......)
请注意,dex 格式规范为您提供了输出“语言”及其含义。这限制了 davlik 翻译器可以做什么,但它不会告诉您翻译器在所有情况下实际上要做什么。
于 2012-12-29T06:51:11.170 回答