Uvod u statički konstruktor na Javi

Statički konstruktor je dio koda koji se koristi za inicijalizaciju statičkih podataka, što znači da određeni zadatak treba izvršiti samo jednom u cijelom programu. Obično se automatski poziva prije nego što se generiraju bilo koji statički članovi ili prva instanca. Statički konstruktor je onaj koji se izričito deklarira pomoću ključne riječi "statički". Konstruktoru ne smije biti Java statički, apstraktni, konačni, izvorni, sinkroniziran ili strog.

Oni imaju nekoliko jedinstvenih značajki kako slijedi:

  • Parametri ili modifikatori pristupa ne uzimaju statički konstruktor.
  • Specifična klasa može imati samo jedan statički konstruktor.
  • Nasljeđivanje ili preopterećenje nije dopušteno u statičkim konstruktorima.
  • Ne može se nazvati izravno, jer se uvijek automatski poziva.
  • Ako nisu osigurane vrijednosti za inicijalizaciju statičkih polja, one se inicijaliziraju na njihovu zadanu vrijednost kao u tablici zadanih vrijednosti.

Sintaksa :

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

Ovdje pokušavamo deklarirati konstruktor u klasi definirajući ga statičkim. Kad se sastavi takav kôd, dobivamo poruku o pogrešci u kojoj se navodi da se ilegalni modifikator koristi za konstruktor u tipu i da su dopušteni samo javni, zaštićeni i privatni.

Rad statičkog konstruktora u Javi

Konstruktorima nije dopušteno da budu statični u Javi iz sljedećeg razloga:

U Javi se za klase primjenjuju statičke metode i varijable. No, konstruktor se zove kada se novi operator koristi za stvaranje instancije. Budući da ne pripada imovinskom razredu, ne dopušta se statičnost. Ako se konstruktor smatra statičkim, ne može mu se pristupiti objekt njegovog podrazreda.

Ali ako je konstruktoru dopušteno da bude statički, njemu se može pristupiti unutar klase, ali ne i njegov podrazred. Isto tako se ne može naslijediti što znači da pripadaju klasi u kojoj su deklarirani. Dopuštanje statičkog konstruktora krši čitav koncept nasljeđivanja, stoga je nezakonito.

Primjeri statičkog konstruktora u Javi

Koncept Statičkog konstruktora u Javi možemo razumjeti bolje u sljedećim primjerima:

Primjer 1

Kodirati:

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

Izlaz:

Tu dobivamo grešku u sastavljanju vremena koja nam govori da statički modifikator nije dopušten za konstruktor Employee () unutar klase Employee (), jer ga zovemo stvaranjem novog objekta u nastavku. To se može riješiti tako da se deklarira kao statično. Pogledajte donji primjer za isti.

Primjer 2

Moramo stvoriti 2 klase unutar istog paketa; ParentExample.java i ChildExample.java koja se proteže od roditeljske klase.

Kodirati:

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

Sada pokrenite ChildExample.java.

Izlaz:

zapažanja:

  • I roditeljska i dječja klasa imaju zadane konstruktore bez argumenata i ispisane poruke kako bi izvršenje bilo jasno.
  • Statički konstruktor je prvi blok koda koji se izvodi u klasi jer se oni izvršavaju odmah kada se pokrene odgovarajuća klasa.
  • Podklasa nadjačava način prikaza poruke () i ispisuje poruku.
  • Napravili smo novi objekt klase ChildExample koji izvršava prvi konstruktor super klase, a zatim drugi podrazred.
  • Najzad se za prikaz poruke poziva novoizrađeni objekt za prikaz.
  • U takvim slučajevima kada se provodi nasljeđivanje, konstruktori se pozivaju ili izričito ili implicitno. Stoga bi ga trebalo učiniti nestalnim kako bi mu bilo dostupno.
  • Kad se napravi statički, tada se povezuje s određenom klasom od njegovih instanci i stoga neće biti dostupan tijekom instancije objekta.

Primjer 3

U ovom ćemo primjeru kombinirati oba gore navedena statička i nestatička konstruktora i provjeriti njegovu provedbu.

Kodirati:

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

Izlaz:

Ograničenja statičkog konstruktora u Javi

Evo nekih ograničenja statičkog konstruktora u Javi data dolje:

  • Imena konstruktora ne mogu biti eksplicitna i moraju biti obavezno ista kao i naziv njihove klase. Budući da su ograničeni na ove konvencije, ne mogu im biti dodijeljena čitljivija imena.
  • Svaki put kada se mora pozvati konstruktor, mora se stvoriti novi objekt. To također utječe na performanse koda, čineći ga sporim.
  • Povratni tipovi konstruktora ograničeni su za vraćanje iste vrste kao i objekta.
  • Ne možemo koristiti statičke konstruktore u konstrukciji podrazreda jer je dopuštena primjena samo konstruktora nadklase.
  • Statički konstruktor ne dopušta upotrebu ključne riječi "ovo" za pristup instanci.
  • Potrebni napori za testiranje više su tamo gdje su uključeni statički konstruktori.

Zaključak

Glavni posao konstruktora je inicijaliziranje objekta i kao što je vidljivo iz svih gore navedenih primjera, konstruktoru nije dopušteno da bude statički iz glavnog razloga što njemu ne može pristupiti objekt potklasa i drugi nestalistički članovi. Alternativa statičkom konstruktoru je upotreba statičkih blokova koda za inicijalizaciju statičkih varijabli klase.

Preporučeni članci

Ovo je vodič za statički konstruktor na Javi. Ovdje raspravljamo o radu, ograničenjima i primjerima statičkih konstruktora u javi u javi zajedno s njihovom primjenom. Možete pogledati i sljedeće članke da biste saznali više -

  1. HashMap u Javi
  2. JavaFX FileChooser
  3. JavaFX TextField
  4. Gumb JavaFX
  5. Primjeri JavaScript statičke metode

Kategorija: