private abstract array
Denne vejledning diskuterer specielle konstruktører som privat konstruktør i Java, abstrakt, streng, matrix, interface og destruktor i Java:
I vores sidste tutorial om konstruktører i Java lærte vi de vigtige begreber relateret til konstruktører i Java. Vi diskuterede, hvordan man opretter en konstruktør og reglerne til at definere konstruktører sammen med typerne af konstruktører osv.
Vi lærte også konstruktøroverbelastning og konstruktorkæde. Lad os nu diskutere visse specielle konstruktører som en privat konstruktør, abstrakt konstruktør og string & array-konstruktører i Java. Derefter vil vi diskutere destruktorer i Java og endelig undersøge forskellene mellem metode og konstruktører.
=> Se på Java Beginners Guide her.
Lad os begynde med en privat konstruktør i Java.
Hvad du lærer:
- Privat konstruktør i Java
- Abstrakt klassekonstruktør i Java
- Interface-konstruktør i Java
- String Constructor I Java
- Array konstruktører i Java
- Destructor I Java
- Konstruktør mod metode i Java
- Ofte stillede spørgsmål
- Konklusion
- Anbefalet læsning
Privat konstruktør i Java
Som allerede nævnt kan konstruktører i Java-klasse have adgangsspecifikatorer tilknyttet. Derfor kan vi have konstruktører, der er private eller offentlige. Vi vil diskutere mere om adgangsspecifikatorer i vores efterfølgende tutorials, og vi vil også besøge konstruktører igen.
Når konstruktøren erklæres privat, kan den kun fås inden for klassen. Det kan ikke få adgang til de afledte klasser via en anden klasse. Derfor er vi nødt til at tilvejebringe en offentlig metode i klassen, der har private konstruktører, så denne offentlige metode kan få adgang til de private konstruktører.
I Java kan privat konstruktør bruges i følgende situationer:
- Til implementering af singletoner.
- Til inkorporering af fabriksmetoder.
- For klasser, der kun har statiske medlemmer (variabler og metoder).
- For klasser med endelige medlemmer. (konstanter - endelig og statisk).
- At bruge typesikre optællinger.
Som et eksempel , lad os tage en singleton-klasse. En singleton-klasse er en klasse, der kun tillader et objekt ad gangen. Vi kan bruge den private konstruktør til at sikre, at vi ikke tillader, at der oprettes mere end et objekt.
Nedenstående program implementerer en singleton-klasse ved hjælp af en privat konstruktør.
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(); } }
Produktion:
Ovenstående program erklærer en singleton-klasse. Vi har leveret en privat konstruktør og en offentlig metode til at få adgang til den private konstruktør og også til at begrænse antallet af objekter til kun en. I hovedmetoden udfører vi den offentlige metode for at oprette et enkelt objekt i klasse.
Abstrakt klassekonstruktør i Java
Abstrakt klasse i Java som C ++ bortset fra at i modsætning til C ++ har vi et abstrakt nøgleord i Java, der bruges til at erklære en abstrakt klasse. Abstrakte klasser i Java kan have konstruktører. Denne abstrakte klassekonstruktør kaldes, når vi opretter en forekomst af en implementeringsklasse (der arver abstrakt klasse).
Overvej følgende eksempel på en abstrakt klassekonstruktør.
//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(); } }
Produktion:
Da en abstrakt klasse ikke kan instantieres, arver vi en ny klasse fra denne abstrakte klasse. Programmets output viser, at når vi opretter et objekt fra den afledte klasse i hovedmetoden, kaldes konstruktøren for den abstrakte klasse først efterfulgt af en afledt klassekonstruktør.
Interface-konstruktør i Java
Grænseflader i Java ligner abstrakte klasser. Grænseflader er som standard offentlig abstrakt og har kun metodeprototyper. Disse prototyper implementeres derefter i den klasse, der implementerer grænsefladen.
Så er konstruktører til stede i grænseflader?
Nej. Grænseflader har ikke konstruktører. Dette skyldes, at metoderne i en grænseflade kun er prototyper, og derfor behøver vi ikke instantiere eller oprette et objekt af grænsefladen, da vi slet ikke vil bruge den. Derfor er der heller ikke behov for at have en konstruktør i grænsefladen.
top mp3 musik downloader til android
Nedenstående Java-program demonstrerer denne logik.
//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)); } }
Produktion:
Her har vi en grænseflade 'Interface_add' med en metode 'addNumbers' prototype. Derefter implementerer en klasse 'AddClass' denne grænseflade og også metoden addNumbers.
I hovedmetoden instantieres klassen, og metoden udføres. Derfor ser vi ikke noget behov for en konstruktør i denne grænseflade.
Lad os nu diskutere konstruktører af nogle allerede eksisterende klasser i Java-lignende streng og matrix.
String Constructor I Java
Et strengobjekt i Java kan defineres som et objekt i klasse String. Strengklasse giver følgende konstruktører til at oprette og initialisere strengobjekter.
Nogle af disse konstruktører diskuteres nedenfor:
# 1) Streng (byte () myArray)
Konstruerer et nyt strengobjekt fra et givet byte-array. Til konstruktion af strengobjektet bruger det standardplatforms tegnsæt og afkoder byte-arrayet.
Eksempel:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) Streng (byte () myArray, Charset char_set)
Denne konstruktør konstruerer et nyt strengobjekt ved hjælp af char_set specificeret i konstruktøropkaldet til at afkode byte-arrayet.
Eksempel:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) Streng (char () myArray)
Vi kan konstruere et strengobjekt ud fra et tegnarray.
Eksempel:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) String (char () myArray, int start_index, int count)
Her konstruerer vi et strengobjekt fra tegnarray ved at inkludere antallet af tegn fra start_index op til optællingen.
Eksempel:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) String (int () intArray, int offset, int count)
Ovenstående konstruktør tildeler et nyt strengobjekt fra et int-array. Antallet af tegn i strengen defineres ved forskydning og antal.
Eksempel:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) String (StringBuffer strbuffer)
I denne konstruktør konstrueres et nyt strengobjekt ud fra et StringBuffer-objekt.
Eksempel:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) String (StringBuilder strbuilder)
Et nyt strengobjekt oprettes ved hjælp af objektet StringBuilder.
Eksempel:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Array konstruktører i Java
Arrays bruger konstruktører til at oprette og initialisere arrays ved hjælp af et nyt nøgleord som vist nedenfor.
int() data = new int(4);
Ovenstående sætning initialiserer en matrix med 4 elementer til standard 0.
En anden måde at initialisere arrayet på er nedenfor:
int() data = new int(){2, 4, 6, 8};
Destructor I Java
Indtil videre har vi set konstruktører i Java, hvor vi opretter et objekt. Når objektet er færdigt med sit job og ikke længere kræves, skal den hukommelse, der er allokeret til objektet, frigøres eller deallokeres. Dette er en destruktørs job i Java.
I Java er Garbage Collector ansvarlig for at frigive de objekter, der ikke mere er i brug eller er blevet utilgængelige. Destruktører i Java kaldes slutbehandlere, og de er ikke-deterministiske, så vi ikke kan garantere, at de bliver udført.
I Java behøver vi ikke bekymre os om destruktører. Destruktører har ikke en bestemt syntaks i Java. Objekter ødelægges, men vi kalder ikke destruktor på den måde, vi kalder det i C ++.
Som nævnt ovenfor udføres destruktørens job af finalisatoren, som kaldes af Garbage Collector.
Finaliseringsmetoden i Java er vist nedenfor til din reference.
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'); } }
Produktion:
I ovenstående program opretter vi et klasseobjekt. Indstil den til null, og så kalder vi System.gc () -metoden. Nu kan objektet ikke nås, og den færdige metode (destruktor) kaldes implicit.
Konstruktør mod metode i Java
Lad os tabulere nogle af forskellene mellem en konstruktør og en metode i Java.
Konstruktører | Metode |
---|---|
Opretter et nyt objekt. | Fungerer på et allerede eksisterende objekt. |
En blok kode, der bruges til at initialisere klassemedlemmerne, når de opretter et objekt. | En samling programmeringserklæringer, der genererer et resultat, når de udføres. |
Bruges til at initialisere objekter. | En række udsagn, der udføres af Java. Kan måske ikke indeholde en initialiseringsrutine. |
Påberåbt sig implicit. | Skal påberåbes eksplicit i et program. |
Påkaldt, når et nyt objekt oprettes ved hjælp af det nye nøgleord. | Påkrævet, når metoden kaldes af programmøren. |
Har samme navn som en klasse. | Det kan have ethvert navn tilladt af programmeringssprog. |
Har ikke returtype. | Skal have returtype ellers returneres den ugyldig. |
En klasse kan have mange overbelastede konstruktører. | Klassen kan have overbelastet såvel som forskellige metoder. |
Det kan ikke arves af børneklassen. | Det kan arves af børneklasse og endda tilsidesættes. |
Ofte stillede spørgsmål
Q # 1) Kan konstruktører være private?
Svar: Ja. Konstruktører i Java kan være private. Alle klasser inklusive abstrakte klasser kan have private konstruktører. Ved hjælp af private konstruktører kan vi forhindre klassen i at blive instantieret, eller vi kan begrænse antallet af objekter i den klasse.
Q # 2) Hvad er brugen af Abstract Class Constructor i Java?
Svar: En abstrakt klassekonstruktør påberåbes, når vi opretter et objekt af den afledte klasse, der arver den abstrakte klasse. Udover hvis den abstrakte klasse har nogle medlemsvariabler, kan vi initialisere dem i den abstrakte klassekonstruktør.
Q # 3) Kan vi definere en parametreret konstruktør i en abstrakt klasse i Java?
Svar: Ja, vi kan have en parameteriseret konstruktør i en abstrakt klasse. Så kan vi kalde denne konstruktør fra den afledte klasse, der arvede den abstrakte klasse ved hjælp af super () kald.
Spørgsmål nr. 4) Ved du, hvorfor der ikke er nogen Destructor i Java?
Svar: Java behøver ikke at have en bestemt destruktor, da den har sin affaldssamler. Denne affaldssamler ødelægger de genstande, der ikke kan nås, og frigiver hukommelsen. En metode, der hedder finalize, er også en del af affaldssamleren, der udfører ikke-deterministisk og udfører ødelæggelsesfunktionen som at frigøre ressourcer osv.
Spørgsmål nr. 5) Kan abstrakt klasse have en krop?
hvor man kan streame anime gratis
Svar: Nej. En abstrakt klasse kan kun have metodedeklarationer og konstruktører. Dens metoder implementeres ikke. Klassen, der arver denne abstrakte klasse, implementerer metoderne. Bortset fra prototype eller erklæringer kan den også have synligheds- eller adgangsspecifikatorer.
Konklusion
Dette fuldender vores tutorial om konstruktører i Java. Her har vi dækket definitionen, skabelsen og typerne af konstruktører. Vi diskuterede også konstruktøroverbelastning og konstruktorkæde i Java.
Vi udforskede abstrakte og private konstruktører i Java og lærte, hvorfor grænseflader ikke kan have konstruktører. Vi så konstruktører, der bruges i array- og strengklasser.
Vi diskuterede også destruktører i Java, der udfører den funktion, der er modsat konstruktørernes. Konstruktører skaber objekter, mens destruktører ødelægger objekter. I Java udføres destruktorfunktionen af finalisatoren, der udføres under skraldopsamling.
Således har vi ikke en bestemt destruktor i Java, og vi behøver ikke definere den på den måde, vi gør i C ++. Vi diskuterede også forskellene mellem metode og konstruktør. Vi ved, at konstruktør ikke er den samme som en metode, men vi kan se konstruktør som en speciel metode.
=> Læs gennem Easy Java Training Series.
Anbefalet læsning
- Java Constructor - klasse-, kopi- og standardkonstruktører
- C # -koncepter: Konstruktør, Destructor, Statisk klasse, Struct & Enum
- Java String Array- Vejledning med kodeeksempler
- Java String med String Buffer og String Builder Tutorial
- Java strenglængde () Metode med eksempler
- Java String indeholder () Metodevejledning med eksempler
- Java-strengindeks Af metode med kodeeksempler
- Java-streng sammenlignet med metode med programmeringseksempler