从我之前和之后读到的内容来看.java
文件编译为.class
文件,每个对象都是简单的Object
擦除后。例如
Foo f = new Foo();
编译为.class
文件,反编译,则变为:
Object f = new Foo();
那么JRE在运行时是如何调用对象的函数的呢?该函数存储在内存中的什么位置?物体内部?或者使用类结构的层次结构并查找层次结构?
根据Java规范 and 维基百科
Java 类文件结构有 10 个基本部分:
- 魔法数字:0xCAFEBABE
- 类文件格式的版本:类文件的次要版本和主要版本
- 常量池:类的常量池
- 访问标志:例如类是否是抽象的、静态的等。
-
这个班:当前班级名称
-
超级级: 超类的名称
- 接口:类中的任何接口
- 字段:类中的任何字段
-
Methods:类中的任何方法
- 属性:类的任何属性(例如源文件的名称等)
在运行时,检索对象的类型、其类文件(或者更确切地说,虚方法表) 检查所调用方法的实现。如果该类没有这样的实现,则检查父类(从超类条目中检索),依此类推,如果没有找到,则最终失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)