Konstruktoriai yra naudojami inicijuojant objekto būseną. Panašiai kaip metodai, konstruktorius taip pat gali laikyti teiginių rinkinį, kurį galima vadinti tik instrukcijomis. Šiame straipsnyje aptarsime „Private Constructor“ tokia tvarka:
- Įvadas į „Java“ konstruktorių
- „Singleton“ klasė
- Privataus konstruktoriaus poveikis „Java“
- Vidaus konstrukcinės grandinės
- „Singleton“ klasės dizaino modelis
Įvadas į „Java“ konstruktorių
Konstruktoriai vykdomi objekto sukūrimo metu. Norėdami geriau suprasti konstruktorių ir jo taikymą, tiesiog pagalvokite apie dėžę kaip klasę. Laikoma, kad „Box“ klasėje yra keletas klasės kintamųjų (t. Y. Ilgis, plotis ir aukštis). Tačiau kuriant savo objektą (t. Y. Dėžutė yra kompiuterio atmintyje), ar gali egzistuoti dėžutė, kurios matmenų dydžiams nėra apibrėžta vertė.
Akivaizdu, kad ne.
Taigi, kuriant objektą, klasių kintamiesiems priskiriamos vertės, pristatomas konstruktorius. Tai gali aiškiai padaryti programuotojas arba pati „Java“. Kai tai atlieka pati „Java“, tai vadinama numatytuoju konstruktoriumi.
Būtina suprasti, kad prie bet kurio metodo, turinčio koduotojo suteikiamą prieigą prie konstruktoriaus, kuris yra privatus, galima patekti tik pačioje klasėje.
„Singleton“ klasė
Pagal patį pavadinimą klasę galime vadinti pavieniu, jei jis apriboja tos klasės objektų skaičių iki vieno. Tokiais atvejais klasė negali turėti daugiau nei vieno objekto. Vienkartinės klasės yra išsamiai naudojamos tokiose sąvokose kaip tinklų kūrimas ir duomenų bazių sujungimas. Singletono klasė yra a privati klasė .
Turi būti dar vienas būdas išskirti klasės egzempliorių ir grąžinimo metodas, norint atgauti rezultatą. Žemiau yra ta pati to paties iliustracija. Pirmajame paveikslėlyje pavaizduotas galimas rezultatas, kai „a.x“ reikšmė lygi 20, o „b.x“ reikšmė taip pat yra 20. Nors kode mes apibrėžiame pavienę privačią klasę, prie jo konstruktorių negalima naudotis už klasės ribų.
Ax vertė = 20
Bx vertė = 20
// Java programa, skirta parodyti Singleton // modelio įgyvendinimą naudojant privačius konstruktorius. importuoti java.io. * klasę „MySingleton“ {statinis „MySingleton“ egzempliorius = null public int x = 10 // privataus konstruktoriaus negalima pasiekti už klasės privataus „MySingleton“ () {} // metodo gamykloje, kad vartotojams būtų suteikta statinė viešoji „MySingleton“ getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Driver Class class Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Ax reikšmė =' + ax) System.out.println ('bx reikšmė =' + bx)}}
Privataus konstruktoriaus poveikis „Java“
Privatūs konstruktoriai negali naudotis išvestinėmis klasėmis iš kitos klasės. Taigi mes turime suteikti viešąją funkciją, kuri vadina privatų konstruktorių. Tuo atveju, kai objektas nėra inicializuotas, arba mes turime atsiųsti objektui egzempliorių, jei jis buvo inicijuotas. Tai ypač naudinga objektams, kurių negalima inicijuoti. Privatus konstruktorius naudojamas šiais atvejais:
- Atitinkamos klasės, turinčios tik statinius metodus ir narius.
- Konkrečios klasės, kuriose naudojami tik plačiai naudojami statiniai galutiniai nariai (konstantos).
- Įtraukti pavienius.
- Įtraukti gamyklinius metodus.
Naudoti sąrašus, kurie yra saugūs tipui.
apache kibirkštis vs hadoop mapreduce
Vidaus konstrukcinės grandinės
Vidinė konstruktoriaus grandinė yra tada, kai konstruktorius paskambina kitam tos pačios klasės konstruktoriui, tada jis gali būti vadinamas konstruktoriaus grandine. Mūsų pareiga yra naudoti šį raktinį žodį, kad paskambintume kitam klasės konstruktoriui. Kai kuriais atvejais jis naudojamas apibrėžti kai kurias numatytąsias klasės kintamųjų reikšmes. Taip pat atminkite, kad kitas konstruktoriaus iškvietimas turi būti pirmasis sakinys kodo bloke.
Be to, neturėtų būti rekursinių skambučių, kurie sukurs begalinę kilpą. Pažvelkime į konstruktoriaus grandinės „Java“ programoje pavyzdį.
paketas com.journaldev.constructor viešoji klasė Darbuotojas {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('sukurtas numatytasis darbuotojas')} public Employee (int i) { this ('John Doe', i) System.out.println ('Employee Created with Default Name')} viešasis darbuotojas (String s, int i) {this.id = i this.name = s System.out.println ( 'Employee Created')} public static void main (String [] args) {Employee emp = new Employee () System.out.println (emp) Darbuotojo emp1 = naujas darbuotojas (10) System.out.println (emp1) Darbuotojo emp2 = new Employee ('Pankaj', 20) System.out.println (emp2)} @Paisyti viešą eilutę toString () {return 'ID =' + id + ', Name =' + name} public int getId () {return id } public void setId (int id) {this.id = id} public String getName () {return name} public void setName (String name) {this.name = name}}
„Singleton“ klasės dizaino modelis
Klasės lygio narys (nekantrus inicijavimo metodas):
Pirmiausia sukurkite privačią nuolatinę statinę pavienės klasės egzempliorių.
Tada parašykite statinį metodą, kuris grąžina pavienės klasės objektą, kurį sukūrėme kaip klasės nario egzempliorių.
Galima pažymėti statinį narį kaip visuomenę, norint tiesiogiai pasiekti nuolatinį statinį egzempliorių.
„Singleton“ klasė skiriasi nuo įprastos „Java“ klasės, kad ji būtų greitesnė. Įprastoje klasėje naudojamas konstruktorius, tačiau vienetinei klasei naudojame get instance () metodą.
Klasės lygio narys (tinginio inicijavimo metodas):
Pirmiausia pradėkite konstruktorių kaip privatų.
Tada sukurkite privatų statinį šios pavienės klasės egzempliorių. Turėkite omenyje, kad NETINKACIJUOTI.
Tada parašykite statinį metodą, kuris patikrina, ar statinio egzemplioriaus narys nėra nulinis, ir inicijuoja egzempliorių. Galiausiai jis grąžina pavienio klasės objektą.
Klasės lygio narys („Lazy Initialization with double lock Method“):
Apsvarstykite dvi veikiančias gijas, kur abu kartu patenka į teiginį „jei“, o egzempliorius yra nulinis. Kur viena gija eina į sinchronizuotą bloką, kad būtų sukurtas egzempliorius, o kitas yra užblokuotas. Kadangi pirmoji gija yra sinchronizuotame bloke, eilėje esanti gija sukuria dar vieną pavienį objektą. Atkreipkite dėmesį, kad kai antroji gija patenka į sinchronizuotą bloką, ji negali patikrinti, ar egzempliorius nėra nulis.
Naudojant įdėtą vidinę klasę („Lazy Load“ metodas):
Čia jis pagrįstas „Java“ kalbos specifikacijomis (JLS). „Java“ virtualioji mašina statinius duomenų narius įkelia tik pagal pareikalavimą. Taigi „Singleton“ klasę pirmiausia įkrauna JVM. Taigi klasėje nėra statinių duomenų nario
„Singleton“ klasės savininkas neįkelia „SINGLE_INSTANCE“. Kai pasitelkiame „getIntance“ metodą, įvyksta tik tai. JLS garantuoja klasės inicializavimą. Nuostata dėl aiškaus sinchronizavimo naudojant statinį getInstance () metodą įkeliant ir inicijuojant. Inicijuojant nuosekliai sukuriamas statinis kintamasis „SINGLE_INSTANCE“, visos kartu esančios „getInstance“ () iškvietos grįš taip pat be sinchronizavimo pridėtinių išlaidų.
Naudojant „Enums“
Ne visi minėti metodai visais atvejais yra visapusiški sprendimai. Naudojant atspindį galima sukurti kelis aukščiau išvardytų įgyvendinimų atvejus. Abiem atvejais galime apeiti privatų konstruktorių ir sukurti kelis egzempliorius. Todėl naujas požiūris yra sukurti pavienę klasę naudojant enums. Kadangi „enums“ laukai yra sudaromi laiko konstantos, tai yra jų „enum“ tipo egzemplioriai. Jie sukonstruojami pirmą kartą nurodant enum tipą.
Tai pasiekėme „Java Constructor“ straipsnio „Java“ pabaigą. Tikiuosi, kad supratote privačius konstruktorius ir kaip juos galima naudoti „Java“.
Patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žvalgytis į „Java“ programavimą ir išmokyti pagrindines ir pažangesnes „Java“ koncepcijas kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.
Turite mums klausimą? Prašau tai paminėti šio „Java Tutorial“ tinklaraščio komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.