En aquest article, aprendrem sobre els mètodes estàtics i els mètodes d'instància a Java.
Mètodes d'instància Java
Els mètodes d'instància són mètodes que requereixen que es creï un objecte de la seva classe abans que es pugui cridar. Per invocar un mètode d'instància, hem de crear un Objecte de la classe en què es defineix el mètode.
public void geek(String name) { // code to be executed.... } // Return type can be int, float String or user defined data type.>
Mètode d'assignació de memòria de la instància
Aquests mètodes en si s'emmagatzemen a l'espai de generació permanent de l'heap (només vàlid fins a Java 7, ara substituït per metaespai de Java 8 i en endavant amb una eficiència millorada), però els paràmetres (arguments que se'ls passa) i les seves variables locals i el valor de ser retornats s'assignen a la pila. Es poden cridar dins de la mateixa classe en què resideixen o des de les diferents classes definides ja sigui en el mateix paquet o en altres paquets depenent de la tipus d'accés proporcionat al mètode d'instància desitjat.
Punts importants:
- Els mètodes d'instància pertanyen a l'objecte de la classe, no a la classe, és a dir, es poden cridar després de crear l'objecte de la classe.
- Els mètodes d'instància no s'emmagatzemen per instància, fins i tot amb mètodes virtuals. S'emmagatzemen en una única ubicació de memòria i només saben a quin objecte pertanyen perquè aquest punter es passa quan els crideu.
- Es poden anul·lar ja que es resolen utilitzant enquadernació dinàmica en temps d'execució.
A continuació es mostra la implementació d'accés al mètode d'instància:
Java
// Example to illustrate accessing the instance method .> import> java.io.*;> class> Foo {> > String name => ''> ;> > // Instance method to be called within the> > // same class or from a another class defined> > // in the same package or in different package.> > public> void> geek(String name) {> this> .name = name; }> }> class> GFG {> > public> static> void> main(String[] args)> > {> > // create an instance of the class.> > Foo ob => new> Foo();> > // calling an instance method in the class 'Foo'.> > ob.geek(> 'techcodeview.com'> );> > System.out.println(ob.name);> > }> }> |
c booleà
>
>Sortida
techcodeview.com>
Mètodes estàtics de Java
Els mètodes estàtics són els mètodes de Java que es poden cridar sense crear un objecte de classe. Són referenciats per la nom de classe en si o referència a l'objecte d'aquesta classe.
public static void geek(String name) { // code to be executed.... } // Must have static modifier in their declaration. // Return type can be int, float, String or user defined data type.>
Assignació de memòria de mètodes estàtics
S'emmagatzemen a l'espai de generació permanent de l'heap ja que s'associen amb la classe en la qual resideixen i no amb els objectes d'aquesta classe. Però les seves variables locals i els arguments passats a ells s'emmagatzemen a la pila. Com que pertanyen a la classe, per tant es poden cridar sense crear l'objecte de la classe.
Punts importants:
- Els mètodes estàtics s'associen a la classe en què resideixen, és a dir, es criden sense crear una instància de la classe, és a dir ClassName.methodName(args) .
- Estan dissenyats amb l'objectiu de ser compartits entre tots els objectes creats a partir de la mateixa classe.
- Els mètodes estàtics no es poden anul·lar, ja que es resolen utilitzant enquadernació estàtica pel compilador en temps de compilació. Tanmateix, podem declarar els mateixos mètodes de nom estàtica ambdós superclasse i subclasse , però es dirà Ocultació del mètode ja que el mètode de classe derivada amagarà el mètode de classe base.
A continuació es mostra la il·lustració d'accés als mètodes estàtics:
Java
// Example to illustrate Accessing> // the Static method(s) of the class.> import> java.io.*;> class> Geek {> > public> static> String geekName => ''> ;> > public> static> void> geek(String name)> > {> > geekName = name;> > }> }> class> GFG {> > public> static> void> main(String[] args)> > {> > // Accessing the static method geek()> > // and field by class name itself.> > Geek.geek(> 'vaibhav'> );> > System.out.println(Geek.geekName);> > // Accessing the static method geek()> > // by using Object's reference.> > Geek obj => new> Geek();> > obj.geek(> 'mohit'> );> > System.out.println(obj.geekName);> > }> }> |
nbsp
>
>Sortida
vaibhav mohit>
Nota:
S'emmagatzemen les variables estàtiques i els seus valors (primitives o referències) definits a la classe PermGen espai de la memòria.
Preguntes freqüents
1. Què passa si la variable estàtica fa referència a un objecte?
static int i = 1; static Object obj = new Object();>A la primera línia, el valor 1 s'emmagatzemaria a la secció PermGen. A la segona línia, l'obj de referència s'emmagatzemaria a la secció PermGen i l'objecte al qual fa referència s'emmagatzemaria a la secció heap.
2. Quan utilitzar mètodes estàtics?
- Quan tingueu codi que es pot compartir entre totes les instàncies de la mateixa classe, poseu aquesta part de codi al mètode estàtic.
- S'utilitzen bàsicament per accedir a camps estàtics de la classe.
3. Diferència entre el mètode d'instància i el mètode estàtic
- El mètode d'instància pot accedir directament als mètodes d'instància i a les variables d'instància.
- El mètode d'instància pot accedir directament a variables estàtiques i mètodes estàtics.
- Els mètodes estàtics poden accedir directament a les variables estàtiques i als mètodes estàtics.
- Els mètodes estàtics no poden accedir directament als mètodes d'instància i a les variables d'instància. Han d'utilitzar la referència a l'objecte. I el mètode estàtic no es pot utilitzar això paraula clau ja que no hi ha cap instància a què es refereixi 'això'.