private abstract array
En aquest tutorial es parlarà de constructors especials, com ara el constructor privat a Java, Abstract, String, Array, Interface i Destructor a Java:
En el nostre últim tutorial sobre constructors a Java, vam aprendre els conceptes importants relacionats amb els constructors a Java. Vam discutir com crear un constructor i les regles per definir constructors, juntament amb els tipus de constructors, etc.
També vam aprendre a sobrecarregar els constructors i a encadenar-los. Ara, parlem de certs constructors especials com ara un constructor privat, un constructor abstracte i un constructor de cadenes i matrius a Java. Després parlarem dels destructors a Java i, finalment, explorarem les diferències entre el mètode i els constructors.
=> Feu una ullada a la guia per a principiants de Java aquí.
Comencem per un constructor privat a Java.
Què aprendreu:
- Constructor privat a Java
- Constructor de classes abstractes a Java
- Constructor d'interfície a Java
- Constructor de cadenes a Java
- Constructors de matrius a Java
- Destructor a Java
- Constructor Vs Method a Java
- Preguntes freqüents
- Conclusió
- Lectura recomanada
Constructor privat a Java
Com ja s'ha esmentat, els constructors de la classe Java poden tenir especificadors d'accés associats. Per tant, podem tenir constructors privats o públics. Discutirem més sobre els especificadors d’accés en els nostres tutorials posteriors i també tornarem a visitar els constructors.
Quan el constructor es declara privat, només s’hi pot accedir a la classe. No pot accedir a les classes derivades mitjançant una altra classe. Per tant, hem de proporcionar un mètode públic a la classe que tingui constructors privats perquè aquest mètode públic pugui accedir als constructors privats.
A Java, el constructor privat es pot utilitzar en les situacions següents:
- Per implementar singletons.
- Per incorporar mètodes de fàbrica.
- Per a classes que només tenen membres estàtics (variables i mètodes).
- Per a classes amb membres finals. (constants - finals i estàtiques).
- Per utilitzar enumeracions segures per tipus.
Com un exemple , fem una classe de singleton. Una classe singleton és una classe que només permet un objecte a la vegada. Podem utilitzar el constructor privat per assegurar-nos que no permetem crear més d’un objecte.
El programa següent implementa una classe singleton mitjançant 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(); } }
Sortida:
El programa anterior declara una classe de singleton. Hem proporcionat un constructor privat i un mètode públic per accedir al constructor privat i també per limitar el nombre d'objectes a només un. Al mètode principal, executem el mètode públic per crear un objecte de classe singleton.
Constructor de classes abstractes a Java
Classe abstracta a Java com a C ++ excepte que a diferència de C ++, tenim una paraula clau abstracta a Java que s’utilitza per declarar una classe abstracta. Les classes abstractes a Java poden tenir constructors. Aquest constructor de classes abstractes s’anomena quan creem una instància d’una classe d’implementació (que hereta la classe abstracta).
Penseu en el següent exemple de constructor de classes abstractes.
//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(); } }
Sortida:
Com que no es pot instanciar una classe abstracta, heretem una nova classe d’aquesta classe abstracta. La sortida del programa mostra que quan creem un objecte de la classe derivada en el mètode principal, aleshores s’anomena primer el constructor de la classe abstracta, seguit d’un constructor de classes derivades.
Constructor d'interfície a Java
Les interfícies a Java són similars a les classes abstractes. Les interfícies són abstractes públics per defecte i només tenen prototips de mètode. Aquests prototips s’implementen a la classe que implementa la interfície.
Aleshores, hi ha constructors presents a Interfaces?
No, les interfícies no tenen constructors. Això es deu al fet que els mètodes d’una interfície són només prototips i, per tant, no hem d’instanciar ni crear cap objecte de la interfície, ja que no l’utilitzarem en absolut. Per tant, tampoc no cal tenir un constructor a la interfície.
El programa Java següent mostra aquesta lògica.
//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)); } }
Sortida:
Aquí tenim una interfície 'Interface_add' amb un prototip de mètode 'addNumbers'. Després, una classe ‘AddClass’ implementa aquesta interfície i també el mètode addNumbers.
En el mètode principal, s’instancia la classe i s’executa el mètode. Per tant, no veiem la necessitat d'un constructor en aquesta interfície.
Ara anem a discutir els constructors d'algunes classes preexistents en Java com String i Array.
Constructor de cadenes a Java
Un objecte de cadena a Java es pot definir com un objecte de la classe String. La classe String proporciona els següents constructors per crear i inicialitzar objectes String.
A continuació, es descriuen alguns d’aquests constructors:
# 1) Cadena (byte () myArray)
Construeix un nou objecte de cadena a partir d'una matriu de bytes donada. Per construir l'objecte de cadena, utilitza el conjunt de caràcters de plataforma per defecte i descodifica la matriu de bytes.
Exemple:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) Cadena (byte () myArray, Charset set_car)
Aquest constructor construeix un nou objecte de cadena utilitzant char_set especificat a la trucada del constructor per descodificar la matriu de bytes.
Exemple:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) Cadena (char () myArray)
Podem construir un objecte String a partir d’una matriu de caràcters.
Exemple:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) Cadena (char () myArray, int start_index, int count)
Aquí, construïm un objecte String a partir de la matriu de caràcters incloent el nombre de caràcters des de start_index fins al recompte.
Exemple:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) Cadena (int () intArray, int offset, int count)
El constructor anterior assigna un nou objecte String d'una matriu int. El nombre de caràcters de la cadena es defineix per desplaçament i recompte.
Exemple:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) Cadena (Strbuffer StringBuffer)
En aquest constructor, es crea un nou objecte String a partir d’un objecte StringBuffer.
Exemple:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) Cadena (StringBuilder strbuilder)
Es crea un nou objecte String mitjançant l’objecte StringBuilder.
Exemple:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Constructors de matrius a Java
Les matrius utilitzen constructors per crear i inicialitzar matrius mitjançant una paraula clau nova, tal com es mostra a continuació.
int() data = new int(4);
La sentència anterior inicialitza una matriu de 4 elements per defecte 0.
A continuació es mostra una altra manera d'inicialitzar la matriu:
int() data = new int(){2, 4, 6, 8};
Destructor a Java
Fins ara hem vist constructors a Java amb els quals creem un objecte. Quan l'objecte ha acabat amb el seu treball i ja no és necessari, cal alliberar o repartir la memòria assignada a l'objecte. Aquesta és la feina d’un destructor a Java.
A Java, Garbage Collector és l’encarregat d’alliberar els objectes que ja no s’utilitzen o que no s’hi poden arribar. Els destructors a Java s’anomenen finalitzadors i no són deterministes, de manera que no podem garantir que s’executin.
A Java, no ens hem de preocupar pels destructors. Els destructors no tenen una sintaxi específica a Java. Els objectes són destruïts, però no anomenem destructor de la manera que ho anomenem a C ++.
Com es va esmentar anteriorment, la tasca del destructor la realitza el finalitzador que és anomenat pel recol·lector de deixalles.
A continuació es mostra el mètode finalitzador a Java per a la vostra referència.
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'); } }
Sortida:
Al programa anterior, creem un objecte de classe. Establiu-lo com a nul i, a continuació, anomenem el mètode System.gc (). Ara aquest objecte no s’hi pot arribar i s’anomena implícitament el mètode finalize (destructor).
Constructor Vs Method a Java
Tabulem algunes de les diferències entre un constructor i un mètode a Java.
Constructors | Mètode |
---|---|
Crea un objecte nou. | Funciona amb un objecte ja existent. |
Un bloc de codi que s’utilitza per inicialitzar els membres de la classe en crear un objecte. | Una col·lecció d’instruccions de programació que generen un resultat quan s’executen. |
S’utilitza per realitzar la inicialització d’objectes. | Una seqüència d’instruccions executades per Java. Pot contenir o no una rutina d'inicialització. |
Invocat implícitament. | Cal invocar-lo explícitament en un programa. |
Invocat quan es crea un objecte nou amb la paraula clau nova. | Invocat quan el programador crida al mètode. |
Té el mateix nom que el d'una classe. | Pot tenir qualsevol nom permès pel llenguatge de programació. |
No té un tipus de retorn. | Ha de tenir un tipus de retorn o, en cas contrari, hauria de tornar nul. |
Una classe pot tenir molts constructors sobrecarregats. | La classe pot haver sobrecarregat, així com mètodes diferents. |
La classe infantil no la pot heretar. | Pot ser heretat per la classe infantil i fins i tot anul·lar-lo. |
Preguntes freqüents
P # 1) Els constructors poden ser privats?
Resposta: Sí. Els constructors a Java poden ser privats. Totes les classes, incloses les classes abstractes, poden tenir constructors privats. Utilitzant constructors privats podem evitar que la classe s’instancie o limitem el nombre d’objectes d’aquesta classe.
Q # 2) Quin ús té el constructor de classes abstractes a Java?
Resposta: Un constructor de classes abstractes s’invoca quan creem un objecte de la classe derivada que hereta la classe abstracta. A més, si la classe abstracta té algunes variables membres, podem inicialitzar-les en el constructor de classes abstractes.
Q # 3) Podem definir un constructor parametritzat en una classe abstracta de Java?
Resposta: Sí, podem tenir un constructor parametritzat en una classe abstracta. Llavors podem anomenar aquest constructor de la classe derivada que va heretar la classe abstracta mitjançant la trucada super ().
Q # 4) Sabeu per què no hi ha Destructor a Java?
Resposta: Java no necessita tenir un destructor específic, ja que té el seu col·lector de deixalles. Aquest recollidor d’escombraries destrueix els objectes que no s’hi poden arribar i allibera la memòria. Un mètode anomenat finalize també és una part del recol·lector d’escombraries que s’executa de manera no determinista i realitza la funció de destructor com alliberar els recursos, etc.
Q # 5) La classe abstracta pot tenir un cos?
Resposta: No. Una classe abstracta només pot tenir declaracions de mètodes i constructors. Els seus mètodes no estan implementats. La classe que hereta aquesta classe abstracta implementa els mètodes. A part de prototips o declaracions, també pot tenir especificadors de visibilitat o accés.
Conclusió
Això completa el nostre tutorial sobre constructors a Java. Aquí hem tractat la definició, la creació i els tipus de constructors. També vam parlar sobre la sobrecàrrega del constructor i la cadena de constructors a Java.
Hem explorat constructors abstractes i privats a Java i hem après per què les interfícies no poden tenir constructors. Vam veure constructors que s’utilitzen en classes de matriu i cadena.
millor programari per clonar HDD a SSD
També vam parlar de destructors a Java que fan la funció contrària a la de constructors. Els constructors creen objectes mentre que els constructors destrueixen objectes. A Java, la funció destructora la realitza el finalitzador que s’executa durant la recollida d’escombraries.
Per tant, no tenim un destructor específic a Java i no cal definir-lo tal com ho fem a C ++. També vam discutir les diferències entre mètode i constructor. Sabem que el constructor no és el mateix que un mètode, però el podem veure com un mètode especial.
=> Llegiu la sèrie de formació Java fàcil.
Lectura recomanada
- Java Constructor: constructors de classe, còpia i predeterminats
- Conceptes de C #: constructor, destructor, classe estàtica, Struct & Enum
- Matriu de cadenes de Java: tutorial amb exemples de codi
- Java String amb buffer de cadenes i tutorial de Generador de cadenes
- Java String length () Mètode amb exemples
- Java String conté () Tutorial de mètode amb exemples
- Java String indexOf Method amb exemples de codi
- Mètode Java String compareTo amb exemples de programació