Úvod do statického konštruktora v Jave

Statický konštruktor je časť kódu používaného na inicializáciu statických údajov, čo znamená, že určitú úlohu je potrebné v rámci programu vykonať iba raz. Zvyčajne sa volá automaticky predtým, ako sa vygenerujú akékoľvek statické členy alebo sa vygeneruje prvá inštancia. Statický konštruktor je taký, ktorý je explicitne deklarovaný pomocou kľúčového slova „statický“. Konštruktor v Java nesmie byť statický, abstraktný, finálny, natívny, synchronizovaný alebo prísny.

Majú niekoľko jedinečných funkcií:

  • Parametre alebo modifikátory prístupu neberie statický konštruktor.
  • Konkrétna trieda môže mať iba jeden statický konštruktor.
  • V statických konštruktoroch nie je dovolené dedenie alebo preťaženie.
  • Nemožno ho vyvolať priamo, pretože sa vždy vyvoláva automaticky.
  • Ak nie sú zadané inicializačné hodnoty statických polí, inicializuje sa na ich predvolenú hodnotu ako v tabuľke Predvolené hodnoty.

Syntax :

public class (
private ;
public static () ()
)

Tu sa snažíme deklarovať konštruktora v triede definovaním ako statického. Pri kompilácii takéhoto kódu sa zobrazí chybové hlásenie, že nelegálny modifikátor sa používa pre konštruktora typu a sú povolené iba verejné, chránené a súkromné.

Práca statického konštruktora v Jave

Konštruktori nesmú mať v Jave statickú povahu z tohto dôvodu:

V Jave sa na triedy vzťahujú statické metódy a premenné. Konštruktor sa však volá, keď sa na vytvorenie inštancie použije nový operátor. Keďže nepatrí do triedy vlastností, nie je dovolené, aby bola statická. Ak sa konštruktor považuje za statický, nemôže k nemu pristupovať objekt jeho podtriedy.

Ak je však konštruktorovi povolené, aby bol statický, môže sa k nemu dostať v rámci triedy, ale nie prostredníctvom podtriedy. Nemožno tiež zdediť, čo znamená, že patria do triedy, v ktorej sú vyhlásení. Povolenie statického konštruktora porušuje celú koncepciu dedičstva, a preto je nezákonné.

Príklady statického konštruktora v Jave

Koncept Static Constructor v jazyku Java môžeme lepšie porozumieť v nasledujúcich príkladoch:

Príklad č. 1

kód:

public class Employee (
//Initialising variables for employee name and ID
public String emp_name;
public int emp_id;
//Declaration of the static constructor
public static Employee()(
System.out.println("Printing Constructor of the Employee class");
)
//Declaring method to print message
public void displayMsg()(
System.out.println("Employee Name is: "+this.emp_name );
System.out.println("Employee ID is: "+this.emp_id );
)
public static void main(String args()) (
//Creating a new object to call the display message constructor
new Employee().displayMsg();
)
)

Výkon:

Tu sa zobrazuje chyba kompilácie, ktorá nám hovorí, že statický modifikátor nie je povolený pre konštruktor Employee () vo vnútri triedy Employee (), pretože to isté nazývame vytvorením nového objektu nižšie. Toto sa dá vyriešiť tak, že sa nevyhlási za statické. Pozrite sa na príklad uvedený nižšie.

Príklad č. 2

Musíme vytvoriť 2 triedy vnútri toho istého balíka; ParentExample.java a ChildExample.java, ktoré siahajú od rodičovskej triedy.

kód:

ParentExample.java:

public class ParentExample (
ParentExample()(
super();
System.out.println("Printing Super constructor inside Parent class");
)
void displayMessage()(
System.out.println("Printing inside display Message class");
)
)

ChildExample.java:

public class ChildExample extends ParentExample (
ChildExample()(
super();
System.out.println("Printing super constructor inside child class");
)
@Override
void displayMessage()(
System.out.println("Printing display message inside Parent example");
)
public static void main(String() args)(
ChildExample childexample = new ChildExample();
childexample.displayMessage();
)
)

Teraz spustite súbor ChildExample.java.

Výkon:

poznámky:

  • Rodičovská aj podradená trieda majú predvolených konštruktorov bez argumentov a správy, aby sa prehľadnosť vykonala.
  • Statický konštruktor je prvý blok kódu, ktorý sa má spustiť v triede, pretože sa vykonáva okamžite pri spustení príslušného vykonávania triedy.
  • Podtrieda prepíše spôsob správy na displeji () a správu vytlačí.
  • Vytvorili sme nový objekt triedy ChildExample, ktorý vykonáva prvý konštruktor nadtriedy a potom druhú podtriedu.
  • Nakoniec je vyvolaná metóda zobrazenia novovytvoreného objektu na zobrazenie správy.
  • V takých prípadoch, keď sa realizuje dedičstvo, sa konštruktory nazývajú explicitne alebo implicitne. Preto by mal byť vyrobený tak, aby nebol prístupný.
  • Ak je vytvorený ako statický, bude priradený ku konkrétnej triede ako k jej inštanciám, a preto nebude k dispozícii počas okamžitého vytvorenia objektu.

Príklad č. 3

V tomto príklade skombinujeme obidva vyššie uvedené statické a nestatické konštruktory a skontrolujeme jeho implementáciu.

kód:

class ParentClass(
private static String message= "Test message";
// Declaring a nested static class
public static class StaticNestedClass(
// In the nested class only static members belonging to parent class can be accessed
// in a static nested class
public void displayprint() (
// We get a compiler error if we try and make this message
// a non-static variable
System.out.println("Displaying from nested class: " + message);
)
)
// Declaring Inner class or also called non-static nested class
public class ChildClass(
// The static and non-static constructor both can be accessed in
// this Child class
public void displayprint()(
System.out.println("Printing from static non-nested class: "+ message);
)
)
)
class Main
(
public static void main(String args())(
// Instance of static nested class creation
ParentClass.StaticNestedClass printer = new ParentClass.StaticNestedClass();
//Calling the non-static constructor of static nested class
printer.displayprint();
// Creating Parent class instance first in order
//to create the child class instance
ParentClass outer = new ParentClass();
ParentClass.ChildClass inner = outer.new ChildClass();
// Here we call the non-static method of Child class
inner.displayprint();
// Creation of instance for child class in one line
//by combining above 2 lines
ParentClass.ChildClass innerObject = new ParentClass().new ChildClass();
// Now we call the child method
innerObject.displayprint();
)
)

Výkon:

Obmedzenia statického konštruktora v Jave

Tu sú niektoré obmedzenia statického konštruktora v jave uvedené nižšie:

  • Názvy konštruktorov nemôžu byť explicitné a musia sa povinne zhodovať s názvom triedy. Pretože sa obmedzujú na tieto konvencie, nemožno im dať čitateľnejšie mená.
  • Vždy, keď je potrebné zavolať konštruktora, musí sa vytvoriť nový objekt. Toto tiež ovplyvňuje výkonnosť kódu, a tým ho spomaľuje.
  • Návratové typy konštruktorov sú obmedzené na vrátenie toho istého typu ako typ objektu.
  • V konštrukcii podtried nemôžeme použiť statické konštruktory, pretože je povolená implementácia iba konštruktorov nadtriedy.
  • Statický konštruktor nepovoľuje použitie kľúčového slova „toto“ na prístup k inštancii.
  • Potrebné testovacie úsilie sa týka viac statických konštruktorov.

záver

Hlavnou úlohou konštruktora je inicializácia objektu a, ako je zrejmé zo všetkých vyššie uvedených príkladov, konštruktorovi nie je dovolené byť statické z toho dôvodu, že objekt podtriedy a iné nestatické členy nemôžu získať prístup k nemu. Alternatívou k statickému konštruktoru je použitie statických blokov kódu na inicializáciu statických premenných triedy.

Odporúčané články

Toto je príručka pre program Static Constructor v jazyku Java. Tu diskutujeme fungovanie, obmedzenia a príklady statických konštruktorov v jave v jave spolu s ich implementáciou. Viac informácií nájdete aj v nasledujúcich článkoch -

  1. HashMap v Jave
  2. FileFhooser JavaFX
  3. JavaFX TextField
  4. Tlačidlo JavaFX
  5. Príklady statickej metódy JavaScript

Kategórie: