Denne månedens Under panseret fokuserer på metodeinnkalling og retur i Java virtual machine (JVM). Den beskriver de fire måtene Java (og native) metoder kan påberopes, gir en kodeeksempel som illustrerer de fire måtene, og dekker de relevante bytekodene.
Metodeinnkallelse
Java-programmeringsspråket gir to grunnleggende typer metoder: forekomstmetoder og klassemetoder (eller statiske). Forskjellen mellom disse to typene metoder er:
Forekomst
metoder krever en forekomst før de kan påberopes, mensklasse
metoder ikke.Forekomst
metoder bruker dynamisk (sen) binding, mensklasse
metoder bruker statisk (tidlig) binding.
Når den virtuelle Java-maskinen påkaller en klassemetode, velger den metoden som skal påkalles basert på typen objektreferanse, som alltid er kjent på kompileringstidspunktet. På den annen side, når den virtuelle maskinen påkaller en forekomstmetode, velger den metoden som skal påkalles basert på den faktiske klassen til objektet, som kanskje bare er kjent på kjøretid.
JVM bruker to forskjellige instruksjoner, vist i tabellen nedenfor, for å påkalle disse to forskjellige typer metoder: invokevirtual til forekomst
metoder, og invokestatiske til klasse
metoder.