private abstract array
Acest tutorial va discuta despre constructorii speciali, cum ar fi constructorul privat în Java, Abstract, String, Array, Interface și Destructor în Java:
În ultimul nostru tutorial despre constructori în Java, am învățat conceptele importante legate de constructori în Java. Am discutat despre cum să creați un constructor și regulile de definire a constructorilor, împreună cu tipurile de constructori etc.
De asemenea, am învățat supraîncărcarea constructorului și înlănțuirea constructorilor. Acum, haideți să discutăm anumiți constructori speciali, cum ar fi un constructor privat, un constructor abstract și un constructor de șiruri și matrice în Java. Apoi vom discuta despre distructori în Java și, în cele din urmă, vom explora diferențele dintre metodă și constructori.
=> Consultați aici Ghidul pentru începători Java.
Să începem cu un constructor privat în Java.
Ce veți învăța:
- Constructor privat în Java
- Constructor de clase abstracte în Java
- Constructor de interfață în Java
- Constructor de șiruri în Java
- Array Constructors In Java
- Destructor în Java
- Constructor Vs Method În Java
- întrebări frecvente
- Concluzie
- Lectură recomandată
Constructor privat în Java
După cum sa menționat deja, constructorii din clasa Java pot avea specificatori de acces asociați cu aceștia. Prin urmare, putem avea constructori care sunt private sau publice. Vom discuta mai multe despre specificatorii de acces în tutorialele noastre ulterioare și vom revedea, de asemenea, constructorii din nou.
care sunt cei mai buni furnizori de e-mail
Când constructorul este declarat privat, atunci acesta poate fi accesat numai în interiorul clasei. Nu poate accesa clasele derivate printr-o altă clasă. Prin urmare, trebuie să oferim o metodă publică în clasă care are constructori privați, astfel încât această metodă publică să poată accesa constructorii privați.
În Java, constructorul privat poate fi utilizat în următoarele situații:
- Pentru implementarea singletonilor.
- Pentru încorporarea metodelor din fabrică.
- Pentru clasele care au numai membri statici (variabile și metode).
- Pentru clasele cu membri finali. (constante - finale și statice).
- Pentru a utiliza enumerări sigure de tip.
Ca exemplu , să luăm o clasă de singleton. O clasă singleton este o clasă care permite un singur obiect la un moment dat. Putem folosi constructorul privat pentru a ne asigura că nu permitem crearea mai multor obiecte.
Programul de mai jos implementează o clasă singleton folosind un constructor privat.
class SingleTonClass { //Static Class Reference private static SingleTonClass obj=null; private SingleTonClass(){ System.out.println('SingleTonClass::Private constructor'); } public static SingleTonClass create_object(){ //logic to create only one instance if(obj==null){ obj= new SingleTonClass(); } return obj; } public void display(){ System.out.println('This is SingleTonClass !!'); } } class Main { public static void main(String args()){ //cannot call private constructor directly. SingleTonClass myobject= SingleTonClass.create_object(); myobject.display(); } }
Ieșire:
Programul de mai sus declară o clasă singleton. Am oferit un constructor privat și o metodă publică pentru a accesa constructorul privat și, de asemenea, pentru a limita numărul de obiecte la unul singur. În metoda principală, executăm metoda publică pentru a crea un obiect de clasă singleton.
Constructor de clase abstracte în Java
Clasa abstractă în Java ca C ++, cu excepția faptului că spre deosebire de C ++, avem un cuvânt cheie abstract în Java folosit pentru a declara o clasă abstractă. Clasele abstracte din Java pot avea constructori. Acest constructor de clase abstracte este numit atunci când creăm o instanță a unei clase de implementare (care moștenește clasa abstractă).
Luați în considerare următorul exemplu de constructor de clase abstracte.
//abstract class declaration abstract class BaseClass { BaseClass() { System.out.println('BaseClass::Constructor Called'); } abstract void func1(); } class DerivedClass extends BaseClass { DerivedClass() { System.out.println('DerivedClass::Constructor Called'); } void func1() { System.out.println('DerivedClass::func1() called'); } } class Main { public static void main(String args()) { DerivedClass d = new DerivedClass(); } }
Ieșire:
Deoarece o clasă abstractă nu poate fi instanțiată, noi moștenim o nouă clasă din această clasă abstractă. Rezultatul programului arată că atunci când creăm un obiect al clasei derivate în metoda principală, atunci se numește primul constructorul clasei abstracte, urmat de un constructor de clase derivate.
Constructor de interfață în Java
Interfețele din Java sunt similare claselor abstracte. Interfețele sunt în mod implicit abstract public și au doar prototipuri de metodă. Aceste prototipuri sunt apoi implementate în clasa care implementează interfața.
Deci, constructorii sunt prezenți în interfețe?
Nu. Interfețele nu au constructori. Acest lucru se datorează faptului că metodele dintr-o interfață sunt doar prototipuri și, prin urmare, nu trebuie să instanțiem sau să creăm un obiect al interfeței, deoarece nu o vom folosi deloc. Prin urmare, nici nu este nevoie să aveți un constructor în interfață.
Programul Java de mai jos demonstrează această logică.
//interface declaration interface Interface_Add{ public int addNumbers(int num1, int num2); //method prototype } class AddClass implements Interface_Add{ public int addNumbers(int num1, int num2){ //method implementation int result= num1+num2; return result; } } class Main{ public static void main(String args()) { AddClass obj= new AddClass(); System.out.println('Result of addition:' + obj.addNumbers(2, 3)); } }
Ieșire:
Aici avem o interfață „Interface_add” cu o singură metodă „addNumbers” prototip. Apoi, o clasă „AddClass” implementează această interfață și, de asemenea, metoda addNumbers.
În metoda principală, clasa este instanțiată și metoda este executată. Prin urmare, nu vedem necesitatea unui constructor în această interfață.
Acum, să discutăm constructorii unor clase preexistente în Java, cum ar fi String și Array.
Constructor de șiruri în Java
Un obiect șir în Java poate fi definit ca un obiect din clasa Șir. Clasa String oferă următorii constructori pentru a crea și inițializa obiecte String.
Unii dintre acești constructori sunt discutați mai jos:
# 1) Șir (octet () myArray)
Construiește un nou obiect String dintr-o matrice de octeți dată. Pentru construirea obiectului șir, acesta folosește setul de caractere implicit al platformei și decodează matricea de octeți.
Exemplu:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) Șir (octet () myArray, Charset char_set)
Acest constructor construiește un nou obiect șir utilizând char_set specificat în apelul constructor pentru a decoda matricea de octeți.
Exemplu:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) Șir (char () myArray)
Putem construi un obiect String dintr-o matrice de caractere.
Exemplu:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) Șir (char () myArray, int start_index, int count)
Aici, construim un obiect String din matrice de caractere prin includerea numărului de caractere de la start_index până la numărare.
Exemplu:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) Șir (int () intArray, int offset, int count)
Constructorul de mai sus alocă un nou obiect String dintr-o matrice int. Numărul de caractere din șir este definit prin decalare și numărare.
ce este un schimbător de voce bun
Exemplu:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) String (StringBuffer strbuffer)
În acest constructor, un nou obiect String este construit dintr-un obiect StringBuffer.
Exemplu:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) Șir (StringBuilder strbuilder)
Un nou obiect String este creat folosind obiectul StringBuilder.
Exemplu:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Array Constructors In Java
Tablourile folosesc constructori pentru a crea și inițializa matricele folosind un nou cuvânt cheie, așa cum se arată mai jos.
int() data = new int(4);
Instrucțiunea de mai sus inițializează o matrice de 4 elemente la valoarea implicită 0.
Un alt mod de inițializare a matricei este dat mai jos:
int() data = new int(){2, 4, 6, 8};
Destructor în Java
Până acum am văzut constructori în Java folosind care creăm un obiect. Când obiectul a terminat cu lucrarea sa și nu mai este necesar, atunci memoria alocată obiectului trebuie eliberată sau alocată. Aceasta este treaba unui destructor în Java.
În Java, Garbage Collector este responsabil pentru eliberarea obiectelor care nu mai sunt folosite sau care au devenit inaccesibile. Destructorii din Java sunt numiți finalizatori și sunt nedeterministe, astfel încât nu putem garanta că vor fi executați.
În Java, nu trebuie să ne facem griji cu privire la distructori. Destructorii nu au o sintaxă specifică în Java. Obiectele sunt distruse, dar nu numim destructor așa cum îl numim în C ++.
După cum sa menționat mai sus, treaba distructorului este realizată de finalizator, care este chemat de Colectorul de gunoi.
Metoda finalizatorului în Java este demonstrată mai jos pentru referință.
class Main { public static void main(String() args) { Main dm = new Main(); //create object dm = null; System.gc(); //call garbage collector System.out.println('Main Mathod'); } protected void finalize() //finalize method { System.out.println('Finalize method :: object is garbage collected'); } }
Ieșire:
În programul de mai sus, creăm un obiect de clasă. Setați-l la nul și apoi apelăm metoda System.gc (). Acum, acel obiect este inaccesibil, iar metoda de finalizare (distructor) este implicit numită.
Constructor Vs Method În Java
Să tabelăm câteva dintre diferențele dintre un constructor și o metodă în Java.
Constructori | Metodă |
---|---|
Creează un obiect nou. | Funcționează pe un obiect deja existent. |
Un bloc de cod folosit pentru a inițializa membrii clasei la crearea unui obiect. | O colecție de instrucțiuni de programare care generează un rezultat atunci când sunt executate. |
Folosit pentru a efectua inițializarea obiectelor. | O secvență de instrucțiuni care sunt executate de Java. Poate conține sau nu o rutină de inițializare. |
Invocat implicit. | Trebuie invocat în mod explicit într-un program. |
Invocat atunci când un obiect nou este creat folosind noul cuvânt cheie. | Invocat când metoda este apelată de programator. |
Are același nume ca cel al unei clase. | Poate avea orice nume permis de limbajul de programare. |
Nu are un tip de returnare. | Trebuie să aibă tip return sau altfel ar trebui să revină nul. |
O clasă poate avea mulți constructori supraîncărcați. | Clasa poate fi supraîncărcată, precum și metode distincte. |
Nu poate fi moștenită de clasa copil. | Poate fi moștenit de clasa copil și chiar suprascris. |
întrebări frecvente
Q # 1) Constructorii pot fi privați?
Răspuns: Da. Constructorii din Java pot fi privați. Toate clasele, inclusiv clasele abstracte, pot avea constructori privați. Folosind constructori privați putem împiedica instanțierea clasei sau putem limita numărul de obiecte ale acelei clase.
Q # 2) La ce folosește Abstract Class Constructor în Java?
Răspuns: Un constructor de clase abstracte este invocat atunci când creăm un obiect al clasei derivate care moștenește clasa abstractă. În plus, dacă clasa abstractă are câteva variabile membre, le putem inițializa în constructorul clasei abstracte.
Q # 3) Putem defini un constructor parametrizat într-o clasă Abstract în Java?
Răspuns: Da, putem avea un constructor parametrizat într-o clasă abstractă. Apoi, putem apela acest constructor din clasa derivată care a moștenit clasa abstractă folosind super () apel.
Q # 4) Știți de ce nu există niciun Destructor în Java?
Răspuns: Java nu trebuie să aibă un distructor specific, deoarece are colectorul de gunoi. Acest colector de gunoi distruge obiectele care nu pot fi atinse și eliberează memoria. O metodă numită finalize este, de asemenea, o parte a colectorului de gunoi care se execută nedeterministic și îndeplinește funcția de destructor, cum ar fi eliberarea resurselor etc.
Q # 5) Poate Abstract Class să aibă un corp?
Răspuns: Nu. O clasă abstractă poate avea doar declarații de metodă și constructori. Metodele sale nu sunt implementate. Clasa care moștenește această clasă abstractă implementează metodele. În afară de prototip sau declarații, acesta poate avea și vizibilitate sau specificatori de acces.
Concluzie
Aceasta completează tutorialul nostru despre constructori în Java. Aici, am acoperit definiția, crearea și tipurile de constructori. Am discutat, de asemenea, supraîncărcarea constructorului și înlănțuirea constructorilor în Java.
Am explorat constructori abstracte și private în Java și am aflat de ce interfețele nu pot avea constructori. Am văzut constructori care sunt utilizați în clasele matrice și șiruri.
De asemenea, am discutat despre distructori în Java care îndeplinesc funcția opusă celei de constructori. Constructorii creează obiecte, în timp ce distructorii distrug obiecte. În Java, funcția de destructor este realizată de finalizator, care este executat în timpul colectării gunoiului.
Astfel, nu avem un destructor specific în Java și nu trebuie să-l definim așa cum avem în C ++. De asemenea, am discutat despre diferențele dintre metodă și constructor. Știm că constructorul nu este același lucru cu o metodă, dar putem vedea constructorul ca o metodă specială.
=> Citiți seria Easy Training Java.
Lectură recomandată
- Java Constructor - Constructori de clasă, copiere și implicită
- Concepte C #: Constructor, Destructor, Clasă statică, Struct & Enum
- Java String Array - Tutorial cu exemple de cod
- Java String cu buffer de șiruri și tutorial de generare de șiruri
- Java String length () Metodă cu exemple
- Șirul Java conține () Tutorial metodă cu exemple
- Java String indexOf Method cu exemple de cod
- Java String compare Metoda cu exemple de programare