1.静态解析
有些符号引用
是在类加载阶段或是第一次使用时就会转换为直接引用,这种转换叫做静态解析
静态解析的四种情形:
- 静态方法
- 父类方法
- 构造方法
- 私有方法(无法被重写)
- final修饰的方法
以上五种方法被称作非虚方法
,他们是在类加载阶段就可以将符号引用转换为直接引用
2.动态链接
有些符号引用则是每次运行期间转化为直接引用,这种转换叫做动态链接.这体现为Java的多态性
3.相关字节码指令
invokeinterface
—调用接口中的方法,实际上是在运行期决定的,决定到底调用实现该接口的那个对象的特定方法invokestatic
—调用静态方法invokespecial
—调用自己的私有方法,构造方法(<init>
以及父类的方法)invokevirtual
—调用虚方法,存在运行期动态查找的过程invokedynamic
—动态调用方法