多态原理
当执行 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");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。