这里解释一下 invokevirtual 指的是调用public的普通方法(动态绑定的,性能较低),像invokespecial则是调用静态方法或者是构造方法或者是final修饰的(这些都是静态绑定的,所以查找效率高)
public class Entry {
private static int count = 0;
{
count = 1;
}
public Entry(){
count=2;
}
}
这里最后count的值就是2,因为其实这些在字节码文件里面都是会合并成一起的,构造方法总是最后调用的。
多态补充
所谓的多态其实就是类文件在加载阶段生成的vtable(虚方法表)里面记录了具体的方法入口地址。
Finally补充
记住,return的值会先被固定在槽里,只有二次调用return才会被覆盖掉,所以上面的结果是Return20。而如果不调用Return单独修改i引用的值是没用的,因为槽里的值已经被固定下来了。比如下面 return的就是10.