private abstract array
Denna handledning diskuterar speciella konstruktörer som privat konstruktör i Java, abstrakt, sträng, matris, gränssnitt och förstörare i Java:
I vår senaste handledning om konstruktörer i Java lärde vi oss de viktiga begreppen relaterade till konstruktörer i Java. Vi diskuterade hur man skapar en konstruktör och reglerna för att definiera konstruktörer, tillsammans med typerna av konstruktörer etc.
Vi lärde oss också överbelastning av konstruktörer och kedjning av konstruktörer. Låt oss nu diskutera vissa speciella konstruktörer som en privat konstruktör, abstrakt konstruktör och sträng & array-konstruktörer i Java. Sedan kommer vi att diskutera destruktorer i Java och slutligen undersöka skillnaderna mellan metod och konstruktörer.
=> Ta en titt på Java-nybörjarguiden här.
Låt oss börja med en privat konstruktör i Java.
Vad du kommer att lära dig:
- Privat konstruktör i Java
- Abstrakt klasskonstruktör i Java
- Gränssnittskonstruktör i Java
- Strängkonstruktör i Java
- Array Constructors In Java
- Destructor I Java
- Konstruktör mot metod i Java
- Vanliga frågor
- Slutsats
- Rekommenderad läsning
Privat konstruktör i Java
Som redan nämnts kan konstruktörer i Java-klass ha åtkomstspecifikatorer associerade med sig. Därför kan vi ha konstruktörer som är privata eller offentliga. Vi kommer att diskutera mer om åtkomstspecifikatorer i våra efterföljande handledning och vi kommer också att se över konstruktörer igen.
När konstruktören förklaras privat kan den endast nås inom klassen. Den kan inte komma åt de härledda klasserna via en annan klass. Därför måste vi tillhandahålla en offentlig metod i klassen som har privata konstruktörer så att denna offentliga metod kan komma åt de privata konstruktörerna.
I Java kan privat konstruktör användas i följande situationer:
- För att implementera singletons.
- För att integrera fabriksmetoder.
- För klasser som bara har statiska medlemmar (variabler och metoder).
- För klasser med slutliga medlemmar. (konstanter - slutlig och statisk).
- Att använda typsäkra uppräkningar.
Som ett exempel , låt oss ta en singleton-klass. En singleton-klass är en klass som endast tillåter ett objekt åt gången. Vi kan använda den privata konstruktören för att säkerställa att vi inte tillåter att mer än ett objekt skapas.
Nedanstående program implementerar en singleton-klass med 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:

Ovanstående program förklarar en singleton-klass. Vi har tillhandahållit en privat konstruktör och en offentlig metod för att komma åt den privata konstruktören och även för att begränsa antalet objekt till endast ett. I huvudmetoden kör vi den offentliga metoden för att skapa ett klassobjekt för singleton.
Abstrakt klasskonstruktör i Java
Abstrakt klass i Java som C ++ förutom att till skillnad från C ++ har vi ett abstrakt nyckelord i Java som används för att förklara en abstrakt klass. Abstrakta klasser i Java kan ha konstruktörer. Denna abstrakta klasskonstruktör kallas när vi skapar en instans av en implementeringsklass (som ärver abstrakt klass).
Tänk på följande exempel på en abstrakt klasskonstruktö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:

Eftersom en abstrakt klass inte kan instansieras, ärver vi en ny klass från denna abstrakta klass. Programmets resultat visar att när vi skapar ett objekt från den härledda klassen i huvudmetoden, kallas konstruktorn för abstraktklassen först, följt av en härledd klasskonstruktör.
Gränssnittskonstruktör i Java
Gränssnitt i Java liknar abstrakta klasser. Gränssnitt är som standard offentlig abstrakt och har endast metodprototyper. Dessa prototyper implementeras sedan i den klass som implementerar gränssnittet.
Så är konstruktörer närvarande i gränssnitt?
Nej. Gränssnitt har inte konstruktörer. Detta beror på att metoderna i ett gränssnitt bara är prototyper och därför behöver vi inte instantiera eller skapa ett objekt för gränssnittet eftersom vi inte alls kommer att använda det. Därför finns det inget behov av att ha en konstruktör i gränssnittet heller.
Nedanstående Java-program visar denna 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:
unix intervjufrågor för produktionsstöd

Här har vi ett gränssnitt 'Interface_add' med en metod 'addNumbers' prototyp. Sedan implementerar en klass 'AddClass' detta gränssnitt och även metoden addNumbers.
I huvudmetoden instansieras klassen och metoden körs. Därför ser vi inget behov av en konstruktör i detta gränssnitt.
Låt oss nu diskutera konstruktörer av några redan existerande klasser i Java-liknande sträng och matris.
Strängkonstruktör i Java
Ett strängobjekt i Java kan definieras som ett objekt i klasssträngen. Strängklass ger följande konstruktörer för att skapa och initiera strängobjekt.
Några av dessa konstruktörer diskuteras nedan:
# 1) Sträng (byte () myArray)
Konstruerar ett nytt strängobjekt från en given byte-array. För att konstruera strängobjektet använder den standardplattformens teckenuppsättning och avkodar byte-arrayen.
Exempel:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE# 2) Sträng (byte () myArray, Charset char_set)
Denna konstruktör konstruerar ett nytt strängobjekt med hjälp av char_set som anges i konstruktörsanropet för att avkoda byte-arrayen.
Exempel:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE# 3) Sträng (char () myArray)
Vi kan konstruera ett strängobjekt från en teckenmatris.
Exempel:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris# 4) Sträng (char () myArray, int start_index, int antal)
Här konstruerar vi ett strängobjekt från teckenmatrisen genom att inkludera antalet tecken från start_index till räkningen.
Exempel:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa# 5) Sträng (int () intArray, int offset, int count)
Ovanstående konstruktör tilldelar ett nytt String-objekt från en int-array. Antalet tecken i strängen definieras av förskjutning och antal.
Exempel:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU # 6) Sträng (StringBuffer strbuffer)
I den här konstruktören konstrueras ett nytt String-objekt från ett StringBuffer-objekt.
Exempel:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp# 7) Sträng (StringBuilder strbuilder)
Ett nytt String-objekt skapas med StringBuilder-objektet.
Exempel:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelpArray Constructors In Java
Arrays använder konstruktörer för att skapa och initialisera arrays med ett nytt nyckelord som visas nedan.
int() data = new int(4);Ovanstående uttalande initialiserar en matris med fyra element till standard 0.
Ett annat sätt att initiera matrisen ges nedan:
int() data = new int(){2, 4, 6, 8};Destructor I Java
Hittills har vi sett konstruktörer i Java med vilka vi skapar ett objekt. När objektet är klart med sitt jobb och inte längre krävs, måste minnet som tilldelats objektet frigöras eller omplaceras. Detta är jobbet för en destruktör i Java.
I Java är Garbage Collector ansvarig för att släppa föremål som inte längre används eller har blivit oåtkomliga. Destruktörer i Java kallas finaliserare och de är icke-deterministiska så att vi inte kan garantera att de kommer att köras.
I Java behöver vi inte oroa oss för destruktörer. Destruktörer har ingen specifik syntax i Java. Objekt förstörs men vi kallar inte destruktor på det sätt vi kallar det i C ++.
Som nämnts ovan görs destruktörens jobb av finaliseraren som kallas av Garbage Collector.
Finaliseringsmetoden i Java visas nedan för din referens.
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 ovanstående program skapar vi ett klassobjekt. Ställ in den på null och då kallar vi System.gc () -metoden. Nu är det objektet oåtkomligt och finaliseringsmetoden (destruktorn) kallas implicit.
Konstruktör mot metod i Java
Låt oss tabellisera några av skillnaderna mellan en konstruktör och en metod i Java.
| Konstruktörer | Metod |
|---|---|
| Skapar ett nytt objekt. | Fungerar på ett redan existerande objekt. |
| Ett kodblock som används för att initialisera klassmedlemmarna när du skapar ett objekt. | En samling programmeringsuttalanden som genererar ett resultat när de körs. |
| Används för att initiera objekt. | En sekvens av uttalanden som körs av Java. Kan eller kanske inte innehålla en initialiseringsrutin. |
| Åberopas implicit. | Behöver åberopas uttryckligen i ett program. |
| Åberopas när ett nytt objekt skapas med det nya nyckelordet. | Åberopas när metoden anropas av programmeraren. |
| Har samma namn som en klass. | Det kan ha vilket namn som helst som tillåts av programmeringsspråket. |
| Har ingen returtyp. | Måste ha returtyp annars skulle den returnera ogiltig. |
| En klass kan ha många överbelastade konstruktörer. | Klassen kan ha överbelastat såväl som distinkta metoder. |
| Det kan inte ärvas av barnklassen. | Det kan ärvas av barnklass och till och med åsidosättas. |
Vanliga frågor
F # 1) Kan konstruktörer vara privata?
Svar: Ja. Konstruktörer i Java kan vara privata. Alla klasser inklusive abstrakta klasser kan ha privata konstruktörer. Med hjälp av privata konstruktörer kan vi förhindra att klassen instantieras eller att vi kan begränsa antalet objekt i den klassen.
F # 2) Vad är användningen av Abstract Class Constructor i Java?
Svar: En abstrakt klasskonstruktör åberopas när vi skapar ett objekt av den härledda klassen som ärver den abstrakta klassen. Förutom om abstraktklassen har några medlemsvariabler kan vi initialisera dem i den abstrakta klasskonstruktören.
F # 3) Kan vi definiera en parametrerad konstruktör i en abstraktklass i Java?
Svar: Ja, vi kan ha en parametrerad konstruktör i en abstrakt klass. Sedan kan vi kalla denna konstruktör från den härledda klassen som ärvde den abstrakta klassen med hjälp av super () -anrop.
F # 4) Vet du varför det inte finns någon Destructor i Java?
Svar: Java behöver inte ha en specifik destruktör eftersom den har sin sopuppsamlare. Denna sopuppsamlare förstör föremålen som är oåtkomliga och släpper ut minnet. En metod som heter finalisera är också en del av sopuppsamlaren som kör icke-deterministiskt och utför destruktörens funktion som att frigöra resurser etc.
F # 5) Kan abstrakt klass ha en kropp?
Svar: Nej. En abstrakt klass kan bara ha metoddeklarationer och konstruktörer. Dess metoder implementeras inte. Klassen som ärver denna abstrakta klass implementerar metoderna. Förutom prototyp eller deklarationer kan den också ha synlighets- eller åtkomstspecifikationer.
hur man öppnar en swf-fil på krom
Slutsats
Detta avslutar vår handledning om konstruktörer i Java. Här har vi täckt definitionen, skapandet och typerna av konstruktörer. Vi diskuterade också överbelastning av konstruktörer och konstruktionskedjor i Java.
Vi utforskade abstrakta och privata konstruktörer i Java och lärde oss varför gränssnitt inte kan ha konstruktörer. Vi såg konstruktörer som används i array- och strängklasser.
Vi diskuterade också destruktorer i Java som utför funktionen motsatt konstruktörernas. Konstruktörer skapar föremål medan förstörare förstör föremål. I Java utförs destruktörfunktionen av finaliseraren som körs under skräpuppsamlingen.
Således har vi inte en specifik destruktör i Java och vi behöver inte definiera den på det sätt vi gör i C ++. Vi diskuterade också skillnaderna mellan metod och konstruktör. Vi vet att konstruktören inte är densamma som en metod men vi kan se konstruktören som en speciell metod.
=> Läs igenom Easy Java Training Series.
Rekommenderad läsning
- Java Constructor - Klass-, kopierings- och standardkonstruktörer
- C # -koncept: konstruktör, förstörare, statisk klass, struktur och enum
- Java String Array - Handledning med kodexempel
- Java String med String Buffer och String Builder Tutorial
- Java Stränglängd () Metod med exempel
- Java String innehåller () Metodhandledning med exempel
- Java-strängindex Om metod med kodexempel
- Java-sträng jämför med metod med programmeringsexempel