以下摘录自《深入理解 JVM 虚拟机》第三版
在 Java 语言中字段是无法重载的,两个字段的数据类型、修饰符不管是否相同,都必须使用不一样的名称,但是对于 Class 文件格式来讲,只要两个字段的描述符不是完全相同,那字段重名就是合法的。
弄不懂这是什么意思。为什么说 Class 文件格式里面可以字段重名?
如果 Java 语言本身不支持字段重名,那么 Java 文件编译出来的 Class 文件里面怎么可能有重名的字段呢?
1
cubecube 2022-07-14 16:10:42 +08:00
意思是,如果你通过 asm 手搓 bytecode ,可以构造出来一个名称一样,描述符不一样的 field
|
2
shyling 2022-07-14 16:17:17 +08:00
意思是 class 文件可以支持,关键词:混淆
|
3
thinkershare 2022-07-14 16:21:10 +08:00
意思就是 Class 文件作为规范支持的很多功能在 Java 语言层面是没有公开的.
如果有其它语言编译到字节码 Class, 可用选择公开这个特性. 或者你也可以后动使用字节码写代码, 这样就可以用到 Class 公开的任何特性了, 但我想一般人不会这么干. |
4
mmdsun 2022-07-15 13:18:59 +08:00 via iPhone
JVM 和 Java 语言语法本来就是独立的,Java 语法不支持不代表 JVM 不可以这样做。毕竟 JVM 还可以支持其他语言
|