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,尽管我没有具体检查是否是这种情况.

上一篇:使用jsr指令进行Java递归


下一篇:Hbase-09-Hlog