logo

Statický konstruktor Java

V Javě nesmí být konstruktor abstraktní, konečný, statický, nativní nebo strictfp. Neexistuje tedy žádná statika konstruktor v Javě .

Statický konstruktor použitý k inicializaci statických dat znamená, že zadaná úloha se v programu provede pouze jednou. Obvykle je statický konstruktor automaticky volán při vygenerování první instance nebo je odkazováno na jakýkoli statický člen. Statický konstruktor je explicitně deklarován pomocí klíčového slova static. V Javě však není povolen statický konstruktor.

jak vycentrovat obrázek na css

Některé klíčové vlastnosti statického konstruktoru jsou následující:

  • Nebude vyžadovat parametry ani modifikátory přístupu.
  • Konkrétní třída může mít pouze jeden statický konstruktor.
  • Neumožňuje dědění ani přetěžování.
  • Je vyvolána automaticky, nelze ji volat přímo ani explicitně.
  • Pokud hodnota statických polí není inicializována, inicializuje se na výchozí hodnoty.

Pojďme pochopit, proč není statický konstruktor povolen v Javě:

Co když vyhlásíme statický konstruktor?

Není povolen statický konstruktor Java programování . Použití statického konstruktoru je nezákonné a proti standardům Java. Program Java tedy nebude zkompilován a vyvolá chybu při kompilaci.

int na řetězec v jazyce Java

Pojďme to pochopit na příkladu. Zvažte níže uvedený příklad:

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

Výstup:

 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) 

Z výše uvedeného příkladu vidíme, že vyvolává výjimku ' Neplatný modifikátor pro typ konstruktoru '. A to je jasně napsáno veřejné, chráněné , & soukromé jsou povoleny.

Proč Java nepodporuje statický konstruktor?

Když cokoli označíme klíčovým slovem static, patří to pouze do třídy, například statická metoda, statická proměnná atd. Statické metody nelze zdědit z jejich podtříd, protože patří do třídy, ve které jsou deklarovány. Podobně nemůžeme použít statickou proměnnou v jejích podtřídách.

jquery toto kliknutí

V případě konstruktoru je konstruktor opakovaně použitelný blok kódu, což znamená, že jej můžeme volat z jeho podtříd během vytváření objektů. Ale když ji deklarujeme jako statickou, nelze ji používat jejími podtřídami jinými než deklarujícími třídami. Je tedy nezákonné deklarovat konstruktor jako statický. Poruší tak celý motiv dědického konceptu.

Pokud deklarujeme konstruktor jako statický, pak k němu nelze přistupovat jeho podtřídami a bude patřit pouze na úroveň třídy. Program nebude zkompilován a vyvolá chybu při kompilaci.

Pojďme to pochopit na příkladu:

StaticConstructorExample.java:

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

StaticConstructorChild.java:

struktury používající pole v c
 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(); } } 

Výstup:

 In StaticConstructorExample Class In StaticConstructorChild class Method of StaticConstructorChild class 

Z výše uvedeného příkladu si můžeme všimnout, že když je vytvořen podřízený objekt třídy, nejprve vyvolá konstruktor rodičovské třídy, poté svůj vlastní konstruktor třídy. Děje se to proto, že klíčové slovo new vytváří objekt a poté vyvolává konstruktor pro inicializaci hodnot. Každá podřízená třída má konstruktor super() jako první příkaz, který dědí vlastnosti z nadřazené třídy.

To je důvod, proč nemůžeme v Javě vytvořit statický konstruktor.

Závěr:

Konstruktory v Javě nemohou být statické, protože pokud jsou konstruktory označeny jako statické, nelze je volat z podřízené třídy; tedy objekt podřízené třídy nebude vytvořen. Program nebude zkompilován a vyvolá chybu při kompilaci.