标签:android dalvik java-bytecode-asm jvm-bytecode jasmin
为什么生成字节代码为
.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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。