到底是怎样实例化的?
?
?
昨天读到这个帖子?http://www.iteye.com/topic/650911?·到底JVM实例化一个对象是怎样的了··
到底有没实例化Object···我 说错了大家帮我改正··
?
?? ? ? ? 先来段简单的程序:
?
?
?
如果不熟悉JVM指令,看到这些东西确实难以理解···很直观的看到Test默认为继承自Object这个JAVA中的超级父类,当new Test()的时候,调用Test的默认构造器,构造器其实就是一个特殊的静态的方法(这样说应该没错吧?)·
?这些指令到底是在干些什么了????aload_0 将第一个引用类型本地变量推送至栈顶?
invokespecial???调用超类构造方法,实例初始化方法,私有方法(调用Object类的构造方法,JAVA中为每一个类的构造方法都生成了一个实例初始化方法,这个方法被称为<init>,我们在指令中能清晰的看到)
getstatic???获取指定类的静态域,并将其值压入栈顶? (获得System类的PrintStream类型的out静态域)
ldc??????将应该并没用实例话Object吧 只是调用了构造方法吧··正如我上面说的···构造器其实就是一个特殊的静态的方法···
?? 并不要创建实例对象·就可以执行····· ???
这个也许是我相当然吧····最近在读深入JAVA虚拟机··等我读的有点头绪了 ·再来下次说说这个吧·
只是最进看这虚拟机的书,看得满投雾水··看来是我自己太菜了···
?
我只是想更形象啊·· 这个话 我好像没写吧????
我啊 工作不到一年啊 菜鸟一个啊 ··莫见笑啊 ··
这就等于在构造函数调用的时候才把当前实例的vt指针指向具体class里的vt表.
vt的构造不需要延迟,但vt的选定肯定需要延迟,要不然多态为什么还要叫动态绑定?