logo

Java statični konstruktor

V Javi ni dovoljeno, da je konstruktor abstrakten, končni, statičen, izvorni ali strictfp. Torej ni statičnega konstruktor v Javi .

Statični konstruktor, ki se uporablja za inicializacijo statičnih podatkov, pomeni, da se bo navedena naloga v celotnem programu izvedla samo enkrat. Običajno se statični konstruktor samodejno pokliče, ko se ustvari prvi primerek ali se sklicuje na katerega koli statičnega člana. Statični konstruktor je izrecno deklariran z uporabo statične ključne besede. Vendar pa statični konstruktor v Javi ni dovoljen.

štetje različnih sql

Nekatere ključne značilnosti statičnega konstruktorja so naslednje:

  • Ne bo sprejemal parametrov ali modifikatorjev dostopa.
  • Določen razred ima lahko samo en statični konstruktor.
  • Ne dovoljuje dedovanja ali preobremenitve.
  • Prikliče se samodejno, ni ga mogoče poklicati neposredno ali eksplicitno.
  • Če vrednost statičnih polj ni inicializirana, se bo inicializirala na privzete vrednosti.

Razumejmo, zakaj statični konstruktor ni dovoljen v Javi:

Kaj pa, če deklariramo statični konstruktor?

Statični konstruktor ni dovoljen Java programiranje . Uporaba statičnega konstruktorja je nezakonita in v nasprotju s standardi Java. Torej program Java ne bo preveden in bo povzročil napako med prevajanjem.

Razumejmo to s primerom. Razmislite o spodnjem primeru:

dateformat.format

StaticConstructorDemo.java:

 public class StaticConstructorDemo { //Declaring a static constructor public static StaticConstructorDemo() { System.out.println('Static Constructor of the class'); } public static void main(String args[]) { // Creating a constructor object to invoke it StaticConstructorDemo obj = new StaticConstructorDemo(); } } 

Izhod:

 Exception in thread 'main' java.lang.Error: Unresolved compilation problem: Illegal modifier for the constructor in type StaticConstructorDemo; only public, protected & private are permitted. at StaticConstructorDemo.(StaticConstructorDemo.java:4) at StaticConstructorDemo.main(StaticConstructorDemo.java:13) 

Iz zgornjega primera lahko vidimo, da vrže izjemo ' Nedovoljen modifikator za tip konstruktorja '. In to je jasno zapisano javno, zaščiteno , & zasebno so dovoljene.

Zakaj Java ne podpira statičnega konstruktorja?

Ko kar koli označimo s statično ključno besedo, pripada samo razredu, na primer statična metoda, statična spremenljivka itd. Statičnih metod ni mogoče podedovati iz svojih podrazredov, ker pripadajo razredu, v katerem so deklarirane. Podobno ne moremo uporabiti statične spremenljivke v njenih podrazredih.

V primeru konstruktorja je konstruktor blok kode, ki ga je mogoče ponovno uporabiti, kar pomeni, da ga lahko pokličemo iz njegovih podrazredov med ustvarjanjem objektov. Toda, ko ga deklariramo kot statičnega, ga ne morejo uporabljati njegovi podrazredi razen razredov za deklariranje. Torej je nezakonito razglasiti konstruktor kot statičen. Tako bo kršil celoten motiv koncepta dedovanja.

Če konstruktor razglasimo za statičnega, potem do njega ne morejo dostopati njegovi podrazredi in bo pripadal le ravni razreda. Program ne bo preveden in vrže napako med prevajanjem.

razvrščanje mehurčkov v algoritmu

Razumejmo to s primerom:

java načrtovalni vzorec

StaticConstructorExample.java:

 public class StaticConstructorExample { public StaticConstructorExample() { /*Constructor of this class*/ System.out.println('In StaticConstructorExample Class'); } } 

StaticConstructorChild.java:

 public class StaticConstructorChild extends StaticConstructorExample { public StaticConstructorChild() { System.out.println('In StaticConstructorChild class'); } public void display() { System.out.println('Method of StaticConstructorChild class'); } public static void main(String args[]) { StaticConstructorChild obj = new StaticConstructorChild(); obj.display(); } } 

Izhod:

 In StaticConstructorExample Class In StaticConstructorChild class Method of StaticConstructorChild class 

Iz zgornjega primera lahko opazimo, da ko je objekt podrejenega razreda ustvarjen, najprej prikliče konstruktorja nadrejenega razreda, nato še lastnega konstruktorja razreda. To se dogaja, ker nova ključna beseda ustvarja objekt in nato kliče konstruktor za inicializacijo vrednosti. Vsak podrejeni razred ima konstruktor super() kot prvi stavek, ki podeduje lastnosti nadrejenega razreda.

To je razlog, zakaj v Javi ne moremo ustvariti statičnega konstruktorja.

Zaključek:

Konstruktorji v Javi ne morejo biti statični, ker če so konstruktorji označeni kot statični, jih ni mogoče poklicati iz podrejenega razreda; tako objekt podrejenega razreda ne bo ustvarjen. Program ne bo preveden in vrže napako med prevajanjem.