达尔维克字节码中的"throws"和"annotation for exception"



为什么字节码生成为

 .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。方法

出现抛出

一个抛出注释附加在每个被声明抛出一个或多个的方法上异常类型。

在本页底部

相关内容

  • 没有找到相关文章

最新更新