Sissejuhatus Java staatilisse konstruktorisse

Staatiline konstruktor on staatiliste andmete initsialiseerimiseks kasutatav kooditükk, mis tähendab, et konkreetset ülesannet tuleb kogu programmi jooksul täita ainult üks kord. Tavaliselt kutsutakse see automaatselt enne kõigi staatiliste liikmete nimetamist või esimese astme genereerimist. Staatiline konstruktor on see, mis kuulutatakse selgesõnaliselt kasutades staatilist märksõna. Konstruktoril ei tohi Java olla staatiline, abstraktne, lõplik, emakeel, sünkroonitud ega rangefail.

Neil on mõned järgmised unikaalsed omadused:

  • Staatiline konstruktor ei võta parameetreid ega juurdepääsu muutjaid.
  • Konkreetsel klassil võib olla ainult üks staatiline konstruktor.
  • Staatilistes konstruktorites pole pärimine ega ülekoormamine lubatud.
  • Seda ei saa otse nimetada, kuna see käivitatakse alati automaatselt.
  • Kui staatiliste väljade lähtestamisväärtusi ei esitata, lähtestatakse see nende vaikeväärtuseni, nagu tabelis Vaikeväärtused.

Süntaks :

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

Püüame siin klassis kuulutada konstruktoriks, määratledes selle staatiliseks. Kui selline kood kompileeritakse, saame veateate, milles öeldakse, et ehitaja puhul kasutatakse illegaalset modifikaatorit ning lubatud on ainult avalik, kaitstud ja privaatne.

Staatilise konstruktori töö Java-s

Ehitajatel ei tohi Java-s staatiline olla järgmistel põhjustel:

Java keeles kehtivad klassidele staatilised meetodid ja muutujad. Kuid ehitajat kutsutakse siis, kui eksemplari loomiseks kasutatakse uut operaatorit. Kuna see ei kuulu varaklassi, ei tohi see olla staatiline. Kui juhuks, kui konstruktorit peetakse staatiliseks, ei pääse sellele alaklassi objekt.

Kuid kui konstruktoril lubatakse olla staatiline, pääseb sellele juurde klassis, kuid mitte selle alaklassi järgi. Samuti ei saa seda pärida, mis tähendab, et nad kuuluvad sellesse klassi, kuhu nad kuulutatakse. Staatilise konstrukatori lubamine rikub kogu pärandi kontseptsiooni, seega on see ebaseaduslik.

Staatilise konstrukatori näited Java-s

Staatilise konstruktori mõistest Java keeles saame paremini aru järgmistes näidetes:

Näide nr 1

Kood:

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äljund:

Siin on tegemist kompileerimisaja veaga, mis ütleb meile, et muutuja staatiline kasutamine töötaja () konstruktoril pole töötaja () klassi sees lubatud, kuna kutsume sama, luues allpool uue objekti. Seda saab lahendada, kui seda ei kuulutata staatiliseks. Vaadake sama näide allpool toodud näites.

Näide 2

Peame looma sama paketi sees 2 klassi; Vanemklass.java ja LasteExample.java, mis ulatub välja tema vanemklassist.

Kood:

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

Nüüd käivitage lapsExample.java.

Väljund:

Vaatlused:

  • Nii vanemklassil kui ka lapsiklassil on vaikekonstruktorid ilma argumentideta ja sõnum prinditud, et täitmise voog oleks selge.
  • Staatiline konstruktor on esimene koodiplokk, mis käivitatakse klassis, kuna need käivitatakse kohe, kui vastava klassi täitmine algab.
  • Alamklass alistab ekraaniteate () meetodi ja prindib teate.
  • Oleme loonud klassi ChildExample uue objekti, mis käivitab esimese superklassi konstruktori ja seejärel teise alaklassi.
  • Lõpuks rakendatakse sõnumi kuvamiseks vastloodud objekti kuvamismeetodit.
  • Sellistel juhtudel, kui pärandi rakendamine toimub, kutsutakse konstruktoreid kas otseselt või kaudselt. Seetõttu tuleks see muuta mittestaatiliseks, nii et see oleks juurdepääsetav.
  • Kui see on staatiline, seostatakse see kindla klassiga kui selle esinemisjuhud ja seetõttu pole see objekti valmimise ajal saadaval.

Näide 3

Selles näites ühendame mõlemad ülaltoodud staatilised ja mittestaatilised konstruktorid ja kontrollime selle rakendamist.

Kood:

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äljund:

Staatilise konstruktori piirangud Java-s

Siin on mõned jaava staatilise konstrukatori piirangud:

  • Ehitaja nimed ei saa olla selged ja need peavad olema kohustuslikult samad, mis selle klassi nimi. Kuna need piirduvad nende konventsioonidega, ei saa neile loetavamaid nimesid anda.
  • Iga kord, kui tuleb kutsuda ehitaja, tuleb luua uus objekt. See mõjutab ka koodi toimimist, muutes selle aeglaseks.
  • Ehitajate tagasitüübid on piiratud sama tüüpi objektide tagastamisega.
  • Alamklasside ehituses ei saa me staatilisi konstruktoreid kasutada, kuna lubatud on kasutada ainult superklassi konstruktoreid.
  • Staatiline konstruktor ei võimalda eksemplarile pääsemiseks kasutada seda märksõna.
  • Vajalikud katsetused on rohkem staatiliste konstruktorite puhul.

Järeldus

Ehitaja peamine töö on objekti initsialiseerimine ja nagu nähtub kõigist ülaltoodud näidetest, ei tohi konstruktor olla staatiline sel põhjusel, et alamklassi objektile ja muudele mittestaatilistele liikmetele ei pääse see juurde. Staatilise konstrukatori alternatiiviks on staatilise koodiploki kasutamine klassi staatiliste muutujate initsialiseerimiseks.

Soovitatavad artiklid

See on Java staatilise konstruktori juhend. Siin arutleme jaava jaavis staatiliste konstruktorite töötamise, piirangute ja näidete üle koos nende rakendamisega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. HashMap Java
  2. JavaFX FileChooser
  3. JavaFX tekstiväli
  4. JavaFX nupp
  5. JavaScripti staatilise meetodi näited

Kategooria: