logo

Metode statice vs metode de instanță în Java

În acest articol, vom afla despre metodele statice și metodele de instanță în Java.

dacă altceva în java

Metode de instanță Java

Metodele de instanță sunt metode care necesită crearea unui obiect din clasa sa înainte de a putea fi apelat. Pentru a invoca o metodă de instanță, trebuie să creăm un Obiect al clasei în care este definită metoda.

public void geek(String name) { // code to be executed.... } // Return type can be int, float String or user defined data type.>

Metoda de alocare a instanței de memorie

Aceste metode în sine sunt stocate în spațiul Generație permanentă al heap-ului (valid până la Java 7, acum înlocuit cu metaspațiu de la Java 8 și mai departe cu o eficiență îmbunătățită), dar parametrii (argumentele transmise acestora) și variabilele lor locale și valoarea pentru fie returnate sunt alocate în stivă. Ele pot fi apelate în cadrul aceleiași clase în care locuiesc sau din diferitele clase definite fie în același pachet, fie în alte pachete, în funcție de tip de acces furnizate la metoda de instanță dorită.



Puncte importante:

  • Metodele de instanță aparțin obiectului clasei, nu clasei, adică pot fi apelate după crearea obiectului clasei.
  • Metodele de instanță nu sunt stocate pe o bază de instanță, chiar și cu metode virtuale. Sunt stocate într-o singură locație de memorie și știu doar cărui obiect aparțin, deoarece acest indicator este transmis atunci când îi apelați.
  • Ele pot fi suprascrise deoarece sunt rezolvate folosind legarea dinamică la timpul de rulare.

Mai jos este implementarea accesării metodei instanței:

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);> >}> }>

>

eliminați primul caracter excel

>

Ieșire

techcodeview.com>

Metode statice Java

Metodele statice sunt metodele din Java care pot fi apelate fără a crea un obiect de clasă. Ele sunt menționate de către numele clasei în sine sau referire la Obiectul acelei clase.

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.>

Alocarea de memorie a metodelor statice

Ele sunt stocate în spațiul Generație permanentă din heap, deoarece sunt asociate cu clasa în care locuiesc, nu cu obiectele acelei clase. Dar variabilele lor locale și argumentele transmise acestora sunt stocate în stivă. Deoarece aparțin clasei, pot fi apelați fără a crea obiectul clasei.

Puncte importante:

  • Metodele statice sunt asociate cu clasa în care locuiesc, adică sunt apelate fără a crea o instanță a clasei, adică ClassName.methodName(args) .
  • Sunt proiectate cu scopul de a fi partajate între toate obiectele create din aceeași clasă.
  • Metodele statice nu pot fi suprascrise, deoarece sunt rezolvate folosind legarea statică de către compilator la momentul compilării. Cu toate acestea, putem avea aceleași metode de nume declarate static în ambele superclasă și subclasă , dar se va numi Ascunderea metodei deoarece metoda clasei derivate va ascunde metoda clasei de bază.

Mai jos este ilustrarea accesării metodelor statice:

bash while loop

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);> >}> }>

>

>

fișierul de schimbare linux
Ieșire

vaibhav mohit>

Notă:

Sunt stocate variabilele statice și valorile lor (primitive sau referințe) definite în clasă PermGen spatiu al memoriei.

întrebări frecvente

1. Ce se întâmplă dacă variabila statică se referă la un obiect?

static int i = 1; static Object obj = new Object();>

În prima linie, valoarea 1 va fi stocată în secțiunea PermGen. În a doua linie, obiectul de referință va fi stocat în secțiunea PermGen, iar obiectul la care se referă va fi stocat în secțiunea heap.

2. Când să folosiți metode statice?

  • Când aveți cod care poate fi partajat în toate instanțele aceleiași clase, puneți acea parte de cod în metoda statică.
  • Ele sunt utilizate practic pentru a accesa câmpurile statice ale clasei.

3. Diferența dintre metoda instanței și metoda statică

  • Metoda instanței poate accesa direct metodele instanței și variabilele instanței.
  • Metoda instanței poate accesa direct variabile statice și metode statice.
  • Metodele statice pot accesa direct variabilele statice și metodele statice.
  • Metodele statice nu pot accesa direct metodele de instanță și variabilele de instanță. Ei trebuie să folosească referire la obiect. Și metoda statică nu poate fi folosită acest cuvânt cheie, deoarece nu există niciun exemplu la care să se facă referire la „aceasta”.