为什么字节码生成为
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/FileNotFoundException;
}
.end annotation
而不是.throws Ljava/io/FileNotFoundException
如果一个方法在头声明throws FileNotFoundException
在java代码?
简短的回答是,在索引格式中没有特定的"抛出"概念。当java类文件转换为索引格式时,将添加一个包含此信息的抛出注释。
稍长的回答:
检查异常的概念只在编译时起作用,而在运行时不起作用。dalvik虚拟机不知道也不关心你的方法会抛出什么异常。就其本身而言,一切都是未经检查的例外。是java编译器强制在抛出子句中声明检查异常。
因此,在索引文件中添加特定的"抛出"概念是没有意义的。相反,该信息是使用更通用的注释特性存储的。听起来你是在使用类似dex2jar的东西将一个索引文件转换回一组类文件,然后在上面使用jasmin。dex2jar很可能没有将索引文件中的Throws注释重新映射回类文件中的Exception属性,尽管我还没有特别检查这种情况是否存在。
dalvik.annotation。方法
出现抛出一个抛出注释附加在每个被声明抛出一个或多个的方法上异常类型。
在本页底部