V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
movq
V2EX  ›  程序员

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

  •  
  •   movq · Jul 14, 2022 · 1186 views
    This topic created in 1387 days ago, the information mentioned may be changed or developed.

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

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

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

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

    4 replies    2022-07-15 13:18:59 +08:00
    cubecube
        1
    cubecube  
       Jul 14, 2022
    意思是,如果你通过 asm 手搓 bytecode ,可以构造出来一个名称一样,描述符不一样的 field
    shyling
        2
    shyling  
       Jul 14, 2022
    意思是 class 文件可以支持,关键词:混淆
    thinkershare
        3
    thinkershare  
       Jul 14, 2022
    意思就是 Class 文件作为规范支持的很多功能在 Java 语言层面是没有公开的.
    如果有其它语言编译到字节码 Class, 可用选择公开这个特性.
    或者你也可以后动使用字节码写代码, 这样就可以用到 Class 公开的任何特性了, 但我想一般人不会这么干.
    mmdsun
        4
    mmdsun  
       Jul 15, 2022 via iPhone
    JVM 和 Java 语言语法本来就是独立的,Java 语法不支持不代表 JVM 不可以这样做。毕竟 JVM 还可以支持其他语言
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2383 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 11:40 · PVG 19:40 · LAX 04:40 · JFK 07:40
    ♥ Do have faith in what you're doing.