S++

千线一眼

导航

JVM-类加载(2)

多态原理

当执行 invokevirtual 指令时:

  1. 先通过栈帧中的对象引用找到对象
  2. 分析对象头,找到对象的实际 Class
  3. Class 结构中有 vtable,它在类加载的链接阶段就已经根据方法的重写规则生成好了
  4. 查表得到方法的具体地址工
  5. 执行方法的字节码

异常处理

面试题-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");
}

posted on 2022-05-23 14:50  S++  阅读(27)  评论(0)    收藏  举报