Johdanto Java-staattiselle rakentajalle

Staattinen rakentaja on koodinpätkä, jota käytetään staattisen datan alustamiseen, mikä tarkoittaa, että tietty tehtävä on suoritettava vain kerran koko ohjelman ajan. Sitä kutsutaan yleensä automaattisesti ennen staattisten jäsenten viittaamista tai ensimmäisen ilmentymän luomista. Staattinen rakentaja on sellainen, joka ilmaistaan ​​selkeästi käyttämällä staattista avainsanaa. Suunnittelijan ei saa olla staattista, abstraktia, lopullista, alkuperäistä, synkronoitua tai tiuhaa Java-versiota.

Niillä on muutama seuraavista ainutlaatuisista ominaisuuksista:

  • Staattinen rakentaja ei ota parametreja tai käyttöoikeuksien muuntajia.
  • Tietyllä luokalla voi olla vain yksi staattinen konstruktori.
  • Perintö tai ylikuormitus eivät ole sallittuja staattisissa konstruktoreissa.
  • Sitä ei voida soittaa suoraan, koska se käynnistetään aina automaattisesti.
  • Jos staattisten kenttien alustusarvoja ei ole annettu, se alustetaan niiden oletusarvoon kuten oletusarvot -taulukossa.

Syntaksi :

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

Yritämme tässä julistaa luokan rakentajan määrittelemällä sen staattiseksi. Kun tällainen koodi kootaan, saamme virheilmoituksen, että laitonta muokkainta käytetään konstruktorissa tyyppiä ja vain julkinen, suojattu ja yksityinen on sallittu.

Staattisen rakentajan työskentely Java: lla

Rakentajien ei sallita olla staattisia Java: ssa seuraavasta syystä:

Java-järjestelmässä staattiset menetelmät ja muuttujat koskevat luokkia. Mutta rakentaja kutsutaan, kun uutta operaattoria käytetään ilmentymän luomiseen. Koska se ei kuulu omaisuusluokkaan, sen ei sallita olla staattinen. Jos konstruktorin katsotaan olevan staattinen, alaluokan kohde ei pääse siihen.

Mutta jos rakentajan sallitaan olla staattinen, niin siihen pääsee luokassa, mutta ei alaluokkaan. Sitä ei myöskään voida periä, mikä tarkoittaa, että he kuuluvat luokkaan, josta he julistetaan. Staattisen rakentajan salliminen rikkoo koko perintökäsitettä, joten se on laiton.

Esimerkkejä staattisesta konstruktorista Javassa

Ymmärrämme Java-staattisen rakentajan käsitettä paremmin seuraavissa esimerkeissä:

Esimerkki # 1

Koodi:

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

lähtö:

Täällä saamme kokoamisaikavirheen, joka kertoo meille, että muuttujan staattinen ei ole sallittu Employee () -konstruktorille Employee () -luokassa, koska kutsumme samaa luomalla uusi objekti alapuolelle. Tämä voidaan ratkaista julistamatta sitä staattiseksi. Katso sama alla oleva esimerkki.

Esimerkki 2

Meidän on luotava 2 luokkaa saman paketin sisällä; ParentExample.java ja ChildExample.java, joka ulottuu sen vanhemmasta luokasta.

Koodi:

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

Suorita nyt ChildExample.java.

lähtö:

havaintoja:

  • Sekä Emo- että Lapsi-luokassa on oletusrakentajat ilman argumentteja ja viesti, joka tulostetaan suorittamisen kulun selkeyttämiseksi.
  • Staattinen rakentaja on luokassa ensimmäinen suoritettu koodilohko, koska ne suoritetaan heti, kun vastaava luokan suorittaminen alkaa.
  • Alaluokka ohittaa näyttöviestin () -menetelmän ja tulostaa viestin.
  • Olemme luoneet uuden ChildExample-luokan objektin, joka suorittaa ensimmäisen superluokan konstruktorin ja sitten toisen alaluokan.
  • Viimeinkin käynnistetään vasta luodun objektin näyttötapa viestin näyttämiseksi.
  • Sellaisissa tapauksissa, joissa perintö toteutetaan, rakentajia kutsutaan joko suoraan tai epäsuorasti. Siksi siitä tulisi tehdä ei-staattinen, jotta siihen pääsee.
  • Kun siitä tehdään staattinen, se liitetään tiettyyn luokkaan kuin sen esiintymät, joten se ei ole käytettävissä objektin toteutuksen aikana.

Esimerkki 3

Tässä esimerkissä yhdistämme sekä yllä olevat staattiset että ei-staattiset rakentajat ja tarkistamme sen toteutuksen.

Koodi:

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

lähtö:

Staattisen konstruktorin rajoitukset Java-ohjelmassa

Tässä on joitain Java-staattisen konstruktorin rajoituksia:

  • Konstruktorien nimet eivät voi olla yksiselitteisiä, ja sen on oltava pakollisesti sama kuin sen luokan nimi. Koska ne rajoittuvat näihin yleissopimuksiin, heille ei voida antaa luettavissa olevia nimiä.
  • Aina kun rakentaja on kutsuttava, on luotava uusi esine. Tämä vaikuttaa myös koodin suorituskykyyn, mikä tekee siitä hitaan.
  • Palautusmuodot konstruktorit on rajoitettu palauttamaan saman tyypin kuin esine.
  • Alaluokan rakentamisessa ei voida käyttää staattisia rakentajia, koska vain yliluokan rakentajien toteuttaminen on sallittua.
  • Staattinen rakentaja ei salli ”tämän” avainsanan käyttöä pääsyyn ilmentymään.
  • Tarvitaan testausponnisteluja enemmän silloin, kun kyseessä ovat staattiset rakentajat.

johtopäätös

Konstruktorin päätehtävänä on objektin alustaminen, ja kuten kaikista yllä olevista esimerkeistä käy ilmi, rakentajan ei sallita olla staattinen pääasiallisesta syystä, että alaluokan kohteeseen ja muihin ei-staattisiin jäseniin ei voida päästä. Vaihtoehto staattiselle rakentajalle on käyttää staattisia koodilohkoja luokan staattisten muuttujien alustamiseen.

Suositellut artikkelit

Tämä on opas Static Constructoriin Java-ohjelmassa. Tässä keskustellaan java-java-staattisten rakentajien työskentelystä, rajoituksista ja esimerkkeistä niiden toteutuksen kanssa. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -

  1. HashMap Java
  2. JavaFX FileChooser
  3. JavaFX TextField
  4. JavaFX-painike
  5. Esimerkkejä JavaScriptin staattisesta menetelmästä