java里是先有的class还是现有的object?

来源:互联网 发布:linux上安装redhat 编辑:程序博客网 时间:2024/06/01 08:26

Java的对象模型中:

  1. 所有的类都是Class类的实例,Object是类,那么Object也是Class类的一个实例。
  2. 所有的类都最终继承自Object类,Class是类,那么Class也继承自Object。

 

这个问题看起来就像是先有鸡还是先有蛋,但实际上1是错误的,准确来说,所有的类对象都是Class的实例。Object是一个抽象的结构,没有实例化的Object并不是Class的一个实例。

第二句话是则是正确的,所有的类最终都会继承Object,包括Class

 

那在jvm的初始化过程中,到底是先有的Class还是先有的Object

其实是在一种混沌的状态下初始化的,再建立两者之间的关系。

混沌

混沌boostrap过程)里,JVM可以为对象系统中最重要的一些核心类型先分配好内存空间,让它们进入[已分配空间][尚未完全初始化]状态。此时这些对象虽然已经分配了空间,但因为状态还不完整所以尚不可使用。然后,通过这些分配好的空间把这些核心类型之间的引用关系串好。到此为止所有动作都由JVM完成,尚未执行任何Java字节码。然后这些核心类型就进入了[完全初始化]状态,对象系统就可以开始自我运行下去,也就是可以开始执行Java字节码来进一步完成Java系统的初始化了。

原创粉丝点击