Uvod v statični konstruktor na Javi

Statični konstruktor je del kode, ki se uporablja za inicializacijo statičnih podatkov, kar pomeni, da je treba določeno nalogo opraviti samo enkrat v celotnem programu. Običajno se pokliče samodejno, preden se ustvarijo kateri koli statični člani ali prvi instanca. Statični konstruktor je tisti, ki je izrecno objavljen s ključno besedo "statični". Konstruktor na Javi ne sme statično, abstraktno, končno, izvorno, sinhronizirano ali strogo nastavljeno.

Imajo nekaj edinstvenih lastnosti, kot sledi:

  • Statični konstruktor ne sprejme parametrov ali modifikatorjev dostopa.
  • Določen razred ima lahko samo en statični konstruktor.
  • Dvigovanje ali preobremenitev v statičnih konstruktorjih ni dovoljeno.
  • Ne morete ga poklicati neposredno, saj se vedno samodejno prikliče.
  • Če statična polja inicializacijske vrednosti niso podana, se ta inicializira na njihovo privzeto vrednost kot v tabeli Privzete vrednosti.

Sintaksa :

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

Tu poskušamo konstruktor razglasiti v razredu, tako da ga definiramo kot statičnega. Ko je sestavljena taka koda, dobimo sporočilo o napaki, ki navaja, da se za konstruktor uporablja nedovoljeni modifikator in da so dovoljeni samo javni, zaščiteni in zasebni.

Delo statičnega konstruktorja na Javi

Konstruktorji na Javi ne smejo statično statirati iz naslednjega razloga:

V Javi za razrede veljajo statične metode in spremenljivke. Toda konstruktor se pokliče, ko za ustvarjanje primerka uporabi nov operater. Ker ne spada v razred lastnosti, ni dovoljeno statično. Če se šteje, da je konstruktor statičen, do njega ne more dostopati objekt njegovega podrazreda.

Če pa je konstruktorju dovoljeno statično, lahko do njega dostopate znotraj razreda, ne pa po njegovem podrazredu. Prav tako ni mogoče podedovati, kar pomeni, da spadajo v razred, za katerega so prijavljeni. Dovoljenje statičnemu konstruktorju krši celoten koncept dedovanja, zato je nezakonito.

Primeri statičnega konstruktorja na Javi

Pojem Static Constructor v Javi lahko razumemo bolje v naslednjih primerih:

Primer # 1

Koda:

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

Izhod:

Tu dobimo napako v času kompilacije, ki nam pove, da statik modifikatorja ni dovoljen konstruktorju Employee () znotraj razreda Employee (), ker ga kličemo z ustvarjanjem novega predmeta spodaj. To je mogoče rešiti tako, da ga ne razglasite za statičnega. Oglejte si spodnji primer za isto.

Primer # 2

V istem paketu moramo ustvariti 2 razreda; ParentExample.java in ChildExample.java, ki sega od nadrejenega razreda.

Koda:

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

Zdaj zaženite ChildExample.java.

Izhod:

Opažanja:

  • Tako razred staršev kot otrok ima privzete konstruktorje brez argumentov in natisnjenega sporočila, da bi izvedba postala jasna.
  • Statični konstruktor je prvi blok kode, ki se zažene v razredu, saj se izvajajo takoj, ko se začne ustrezna izvedba razreda.
  • Podrazred preglasi način prikaznega sporočila () in natisne sporočilo.
  • Ustvarili smo nov objekt razreda ChildExample, ki izvede prvi konstruktor superklasa in nato drugi podrazred.
  • Končno se za prikaz sporočila prikliče način prikaza novo ustvarjenega predmeta.
  • V takih primerih, ko se izvaja dedovanje, se konstruktorji pokličejo izrecno ali implicitno. Zato je treba narediti nestatično, tako da je dostopen.
  • Ko je narejen statičen, se nato poveže z določenim razredom kot njegovi primerki, zato med primerjanjem predmetov ne bo na voljo.

Primer # 3

V tem primeru bomo združili tako zgornje statične kot nestatične konstruktorje in preverili njegovo izvajanje.

Koda:

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

Izhod:

Omejitve statičnega konstruktorja na Javi

Spodaj je nekaj omejitev statičnega konstruktorja v Javi:

  • Imena konstruktorjev ne morejo biti izrecna in morajo biti obvezno enaka imenu razreda. Ker so omejene na te konvencije, jim ne moremo dati imena bolj berljivih imen.
  • Vsakič, ko je potrebno poklicati konstruktor, je treba ustvariti nov objekt. To vpliva tudi na delovanje kode, tako da je počasna.
  • Vrnjeni tipi konstruktorjev so omejeni, da vrnejo isti tip kot predmet objekta.
  • Statičnih konstruktorjev pri konstrukciji podrazred ne moremo uporabljati, saj je dovoljena uporaba samo konstruktorjev višjih razredov.
  • Statični konstruktor ne dovoljuje uporabe ključne besede "to" za dostop do primerka.
  • Potrebna preizkusna prizadevanja so večja, če gre za statične konstruktorje.

Zaključek

Glavna naloga konstruktorja je inicializiranje predmeta, in kot je razvidno iz vseh zgornjih primerov, konstruktor ni dovoljen, da bi bil statičen zaradi glavnega razloga, da do njega ni mogoče dostopati do podrazreda in drugih nestatičnih članov. Alternativa statičnemu konstruktorju je z uporabo statičnih blokov kode za inicializacijo statičnih spremenljivk razreda.

Priporočeni članki

To je vodnik za statični konstruktor na Javi. Tukaj razpravljamo o delu, omejitvah in primerih statičnih konstruktorjev v javi v javi ter njihovi izvedbi. Če želite izvedeti več, si oglejte tudi naslednje članke -

  1. HashMap v Javi
  2. JavaFX FileChooser
  3. JavaFX TextField
  4. Gumb JavaFX
  5. Primeri statične metode JavaScript