[JVM 相关] 为什么说 Class 文件格式里面可以字段重名?

2022-07-14 16:07:00 +08:00
 movq

以下摘录自《深入理解 JVM 虚拟机》第三版

在 Java 语言中字段是无法重载的,两个字段的数据类型、修饰符不管是否相同,都必须使用不一样的名称,但是对于 Class 文件格式来讲,只要两个字段的描述符不是完全相同,那字段重名就是合法的。

弄不懂这是什么意思。为什么说 Class 文件格式里面可以字段重名?

如果 Java 语言本身不支持字段重名,那么 Java 文件编译出来的 Class 文件里面怎么可能有重名的字段呢?

791 次点击
所在节点    程序员
4 条回复
cubecube
2022-07-14 16:10:42 +08:00
意思是,如果你通过 asm 手搓 bytecode ,可以构造出来一个名称一样,描述符不一样的 field
shyling
2022-07-14 16:17:17 +08:00
意思是 class 文件可以支持,关键词:混淆
thinkershare
2022-07-14 16:21:10 +08:00
意思就是 Class 文件作为规范支持的很多功能在 Java 语言层面是没有公开的.
如果有其它语言编译到字节码 Class, 可用选择公开这个特性.
或者你也可以后动使用字节码写代码, 这样就可以用到 Class 公开的任何特性了, 但我想一般人不会这么干.
mmdsun
2022-07-15 13:18:59 +08:00
JVM 和 Java 语言语法本来就是独立的,Java 语法不支持不代表 JVM 不可以这样做。毕竟 JVM 还可以支持其他语言

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX