方法的调用

JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制有关。

  • 静态链接:当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知且运行期保持不变时,这种情况下将调用方法的符号引用转换为直接引用的过程称为静态链接。
  • 动态链接:如果被调用的方法在编译期无法被确定下来,也就是说只能够在程序运行期将调用方法的符号引用转换为直接引用,由于这种转换过程具备动态性,因此也被称为动态链接。

对应的方法绑定机制为:早期绑定与晚期绑定。绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程,这仅仅发生一次。

  • 早期绑定:指被调用的目标方法如果在编译期可知,且运行期保持不变时,即可将这个方法与所属的类型进行绑定。这样一来,由于明确了被调用的目标方法属于究竟是哪一个,因此就可以使用静态链接的方式将符号引用转换为直接引用。
  • 晚期绑定:如果被调用的方法在编译期无法被确定下来,只能怪在程序运行期根据实际的类型绑定相关的方法,这种绑定方式也就被称之为晚期绑定。

Java中任何一个普通的方法其实都具备虚函数的特征,它们相当于C++语言中的虚函数(C++中则需要使用关键字virtual来显式定义)。如果在Java程序中不希望某个方法拥有虚函数的特征时,可以使用关键字final来标记这个方法。

欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/13657123.html