为什么字节代码生成为
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/FileNotFoundException;
}
.end annotation
而不是.throws Ljava/io/FileNotFoundException
如果方法在java代码的头文件中声明throws FileNotFoundException
?
答案 0 :(得分:4)
简短的回答是dex格式中没有特定的“抛出”概念。当java类文件转换为dex格式时,会添加包含此信息的Throws annotation。
答案稍长:
检查异常的概念仅在编译时有效,而不是在运行时。 dalvik虚拟机不知道或关心您的方法可以抛出的异常。就其而言,一切都是未经检查的例外。这是java编译器强制在throws子句中声明已检查的异常。
因此,在dex文件中添加特定的“throws”概念是没有意义的。相反,使用更通用的注释功能存储该信息。
听起来你正在使用类似dex2jar的东西将dex文件转换回一组类文件,然后使用jasmin。 dex2jar可能不会将dex文件中的Thoss注释重新映射回类文件中的Exception attribute,尽管我没有具体检查是否是这种情况。
答案 1 :(得分:1)
dalvik.annotation.Throws出现在方法
上A Throws annotation附加到声明抛出一个或多个的每个方法 异常类型。
位于this page的底部。