方法的調(diào)用:虛方法與非虛方法
非虛方法:
- 如果方法在編譯器就確定了具體的調(diào)用版本,這個(gè)版本在運(yùn)行時(shí)是不可變的国旷。這樣的方法稱為
非虛方法
。 - 靜態(tài)方法、私有方法陶缺、final方法、實(shí)例構(gòu)造器洁灵、父類方法都是非虛方法
- 其他方法稱為虛方法
虛擬機(jī)中提供了以下幾條方法調(diào)用指令:
普通調(diào)用指令:
1.invokestatic:調(diào)用靜態(tài)方法,解析階段確定唯一方法版本
2.invokespecial:調(diào)用<init>方法饱岸、私有及父類方法,解析階段確定唯一方法版本
3.invokevirtual:調(diào)用所有虛方法
4.invokeinterface:調(diào)用接口方法動(dòng)態(tài)調(diào)用指令:
5.invokeddynamic:動(dòng)態(tài)解析出需要調(diào)用的方法,然后執(zhí)行
前四條指令固化在虛擬機(jī)內(nèi)部,方法的調(diào)用執(zhí)行不可人為干預(yù),而invokedynamic指令則支持由用戶確定方法版本。其中invokestatic指令和invokespecial指令調(diào)用的方法稱為非虛方法,其余的(final修飾的除外)稱為虛方法徽千。