Method
5/23/26About 1 min
Method
调用静态方法:类名.方法名
函数签名(Method Signature) 只包含两部分:
- 方法名 (Method Name)
- 参数列表 (Parameter List)(包括参数的类型、数量和顺序)
按值传参
调用方法时,都是通过传值的方式将实参传给形参的,基本类型和引用类型都不例外。
- 基本类型传的是“真实数值的副本”
- 引用类型传的是“内存地址引用的副本”
匹配方法
Java 虚拟机在确定到底执行哪个方法时,严格遵循以下两个阶段:
第一步:编译期看左边(确定方法签名)—— 静态绑定
编译器只看变量的声明类型。它会去该类型及其父类中,寻找参数最匹配的方法,并死死锁定这个方法的签名(参数类型)。
匹配顺序:精确匹配 $\rightarrow$ 自动向上转型(
byte$\rightarrow$short$\rightarrow$int$\rightarrow$long$\rightarrow$float$\rightarrow$double;引用类型转换为最近的父类) $\rightarrow$ 自动装箱/拆箱 $\rightarrow$ 变长参数。
null 可以匹配任何的引用类型
在同一阶段出现多个可匹配的方法:选择最精确的,若有多个同等精确将报错
第二步:运行期看右边(确定具体实现)—— 动态绑定
程序运行起来后,JVM 只看变量实际指向的对象类型(即 new 出来的类型)。如果在第一步锁定的那个签名被实际对象所在的类重写(Override) 了,就调用子类的;如果没有重写,就调用父类的。