V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
movq
V2EX  ›  程序员

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

  •  
  •   movq · 2022-07-14 16:07:00 +08:00 · 858 次点击
    这是一个创建于 867 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    4 条回复    2022-07-15 13:18:59 +08:00
    cubecube
        1
    cubecube  
       2022-07-14 16:10:42 +08:00
    意思是,如果你通过 asm 手搓 bytecode ,可以构造出来一个名称一样,描述符不一样的 field
    shyling
        2
    shyling  
       2022-07-14 16:17:17 +08:00
    意思是 class 文件可以支持,关键词:混淆
    thinkershare
        3
    thinkershare  
       2022-07-14 16:21:10 +08:00
    意思就是 Class 文件作为规范支持的很多功能在 Java 语言层面是没有公开的.
    如果有其它语言编译到字节码 Class, 可用选择公开这个特性.
    或者你也可以后动使用字节码写代码, 这样就可以用到 Class 公开的任何特性了, 但我想一般人不会这么干.
    mmdsun
        4
    mmdsun  
       2022-07-15 13:18:59 +08:00 via iPhone
    JVM 和 Java 语言语法本来就是独立的,Java 语法不支持不代表 JVM 不可以这样做。毕竟 JVM 还可以支持其他语言
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1136 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.