android – Dalvik字节码中的“throws”和“exception of annotation”
作者:互联网
为什么生成字节代码为
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/FileNotFoundException;
}
.end annotation
而不是.throws Ljava / io / FileNotFoundException
如果一个方法声明在java代码的头文件中抛出FileNotFoundException?
解决方法:
简短的回答是dex格式中没有特定的“抛出”概念.当java类文件转换为dex格式时,会添加包含此信息的Throws annotation.
答案稍长一点:
检查异常的概念仅在编译时,而不是在运行时. dalvik虚拟机不知道或关心您的方法可以抛出的异常.就其而言,一切都是未经检查的例外.这是java编译器强制在throws子句中声明已检查的异常.
因此,在dex文件中添加特定的“throws”概念是没有意义的.相反,使用更通用的注释功能存储该信息.
听起来你正在使用像dex2jar这样的东西将dex文件转换回一组类文件然后在它上面使用jasmin. dex2jar可能不会将dex文件中的Throws注释重新映射回类文件中的Exception attribute,尽管我没有具体检查是否是这种情况.
标签:android,dalvik,java-bytecode-asm,jvm-bytecode,jasmin 来源: https://codeday.me/bug/20190620/1246195.html