JVM-类加载(2)
多态原理
当执行 invokevirtual 指令时:
- 先通过栈帧中的对象引用找到对象
- 分析对象头,找到对象的实际 Class
- Class 结构中有 vtable,它在类加载的链接阶段就已经根据方法的重写规则生成好了
- 查表得到方法的具体地址工
- 执行方法的字节码
异常处理
面试题-1
public int fun1(){
try {
return 1;
} finally {
return 2;
}
}
结果是返回2(finally中return会吞掉异常,实际工作中不要这样使用)
面试题-2
public int fun1(){
int i = 1;
try {
return i;
} finally {
i = 2;
}
}
返回结果是1
在try中return时会暂存数据,去执行finally中的代码
synchronized
// 创建了一个对象,将这个对象的引用放入操作数栈,并复制一份
// 第一次消耗掉栈顶的引用,调用构造方法
// 第二次将将引用赋予lock变量
Object lock = new Object();
// 将对象引用加载到操作数栈,表示synchronized开始了
// 对lock对象的引用再一次复制(一个供monitorenter指令使用,另一个供monitorexit指令使用)
synchronized(lock) {
System.out.println("ok");
}
浙公网安备 33010602011771号