V tomto článku sa dozvieme o statických metódach a metódach inštancií v jazyku Java.
Java metódy inštancie
Metódy inštancií sú metódy, ktoré vyžadujú, aby bol objekt svojej triedy vytvorený predtým, ako sa dá volať. Na vyvolanie metódy inštancie musíme vytvoriť objekt triedy, v ktorej je metóda definovaná.
public void geek(String name) { // code to be executed.... } // Return type can be int, float String or user defined data type.> Metóda prideľovania pamäte inštancie
Samotné tieto metódy sú uložené v priestore Permanent Generation na halde (Platné len do Java 7, teraz nahradené metapriestorom od Java 8 a novších so zlepšenou účinnosťou), ale parametre (argumenty, ktoré im boli odovzdané) a ich lokálne premenné a hodnota byť vrátené sú alokované v zásobníku. Môžu byť volané v rámci rovnakej triedy, v ktorej sídlia, alebo z rôznych tried definovaných buď v rovnakom balíku alebo iných balíkoch v závislosti od typ prístupu poskytnuté požadovanej metóde inštancie.
Dôležité body:
- Metóda (metódy) inštancie patrí do objektu triedy, nie do triedy, t. j. možno ich volať po vytvorení objektu triedy.
- Metódy inštancií sa neukladajú na základe jednotlivých inštancií, a to ani pri virtuálnych metódach. Sú uložené na jedinom pamäťovom mieste a vedia, ku ktorému objektu patria, len preto, že tento ukazovateľ sa odovzdá, keď ich zavoláte.
- Môžu byť prepísané, pretože sú vyriešené pomocou dynamická väzba v čase behu.
Nižšie je uvedená implementácia prístupu k metóde inštancie:
Java
matematická trieda 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);> >}> }> |
systémový softvér
>
>Výkon
techcodeview.com>
Statické metódy Java
Statické metódy sú metódy v jazyku Java, ktoré možno volať bez vytvorenia objektu triedy. Odkazuje sa na ne samotný názov triedy alebo odkaz na Objekt tejto triedy.
padding css
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.> Alokácia pamäte statických metód
Sú uložené v priestore haldy Permanent Generation, keďže sú spojené s triedou, v ktorej sídlia, nie s objektmi tejto triedy. Ale ich lokálne premenné a im odovzdané argumenty sú uložené v zásobníku. Keďže patria do triedy, možno ich volať bez vytvorenia objektu triedy.
Dôležité body:
- Statické metódy sú spojené s triedou, v ktorej sa nachádzajú, t. j. sú volané bez vytvorenia inštancie triedy, t.j. ClassName.methodName(args) .
- Sú navrhnuté s cieľom zdieľať ich medzi všetkými objektmi vytvorenými z rovnakej triedy.
- Statické metódy nemožno prepísať, pretože sú vyriešené pomocou statická väzba kompilátorom v čase kompilácie. Môžeme však mať deklarované metódy s rovnakým názvom statické v oboch supertrieda a podtrieda , ale bude sa volať Skrytie metódy pretože metóda odvodenej triedy skryje metódu základnej triedy.
Nižšie je znázornený prístup k statickým metódam:
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);> >}> }> |
>
np priemer
>Výkon
vaibhav mohit>
Poznámka:
Statické premenné a ich hodnoty (primitívy alebo referencie) definované v triede sú uložené v PermGen priestor pamäte.
často kladené otázky
1. Čo ak statická premenná odkazuje na Objekt?
static int i = 1; static Object obj = new Object();>V prvom riadku by bola hodnota 1 uložená v sekcii PermGen. V druhom riadku bude referenčný objekt uložený v sekcii PermGen a objekt, na ktorý odkazuje, bude uložený v sekcii haldy.
2. Kedy použiť statické metódy?
- Keď máte kód, ktorý je možné zdieľať vo všetkých inštanciách rovnakej triedy, vložte túto časť kódu do statickej metódy.
- V podstate sa používajú na prístup k statickým poliam triedy.
3. Rozdiel medzi metódou inštancie a statickou metódou
- Metóda inštancie môže priamo pristupovať k metódam inštancie a premenným inštancie.
- Metóda inštancie môže priamo pristupovať k statickým premenným a statickým metódam.
- Statické metódy môžu pristupovať priamo k statickým premenným a statickým metódam.
- Statické metódy nemajú priamy prístup k metódam inštancie a premenným inštancie. Musia použiť odkaz na objekt. A statickú metódu nemožno použiť toto kľúčové slovo, pretože neexistuje žiadny príklad pre „toto“, na ktorý by sa dalo odkazovať.