private abstract array
V tomto kurzu se budeme zabývat speciálními konstruktory, jako je soukromý konstruktor v Javě, abstrakt, řetězec, pole, rozhraní a destruktor v Javě:
moje otázky a odpovědi na sql rozhovor
V našem posledním tutoriálu o konstruktorech v Javě jsme se naučili důležité pojmy související s konstruktory v Javě. Diskutovali jsme o tom, jak vytvořit konstruktor a pravidla pro definování konstruktorů, spolu s typy konstruktorů atd.
Také jsme se naučili přetížení konstruktoru a řetězení konstruktorů. Nyní pojďme diskutovat o určitých speciálních konstruktorech, jako je soukromý konstruktor, abstraktní konstruktor a konstruktory řetězců a polí v Javě. Poté probereme destruktory v Javě a nakonec prozkoumáme rozdíly mezi metodou a konstruktory.
=> Prohlédněte si příručku Java Beginners Guide zde.
Začněme soukromým konstruktérem v Javě.
Co se naučíte:
- Soukromý konstruktér v Javě
- Konstruktor abstraktní třídy v Javě
- Konstruktor rozhraní v Javě
- Řetězcový konstruktor v Javě
- Konstruktory polí v Javě
- Destruktor v Javě
- Metoda Constructor Vs v Javě
- Často kladené otázky
- Závěr
- Doporučené čtení
Soukromý konstruktér v Javě
Jak již bylo zmíněno, konstruktory ve třídě Java mohou mít přidružené specifikátory přístupu. Proto můžeme mít konstruktory, které jsou soukromé nebo veřejné. Podrobněji o specifikátorech přístupu budeme diskutovat v našich dalších výukových programech a znovu se znovu podíváme na konstruktory.
Když je konstruktor prohlášen za soukromý, lze k němu přistupovat pouze uvnitř třídy. Nemůže přistupovat k odvozeným třídám prostřednictvím jiné třídy. Proto musíme poskytnout veřejnou metodu ve třídě, která má soukromé konstruktory, aby tato veřejná metoda mohla přistupovat k soukromým konstruktorům.
V Javě lze soukromý konstruktor použít v následujících situacích:
- Pro implementaci singletonů.
- Pro začlenění továrních metod.
- Pro třídy, které mají pouze statické členy (proměnné a metody).
- Pro třídy s konečnými členy. (konstanty - konečné a statické).
- Chcete-li použít výčty bezpečné pro typ.
Jako příklad , pojďme na třídu pro jednoho. Třída singleton je třída, která umožňuje pouze jeden objekt najednou. Pomocí soukromého konstruktoru můžeme zajistit, že nedovolíme vytvořit více než jeden objekt.
Níže uvedený program implementuje třídu singleton pomocí soukromého konstruktoru.
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(); } }
Výstup:
Výše uvedený program deklaruje třídu singleton. Poskytli jsme soukromý konstruktor a veřejnou metodu pro přístup k soukromému konstruktoru a také k omezení počtu objektů pouze na jeden. V hlavní metodě provedeme veřejnou metodu k vytvoření objektu třídy singleton.
Konstruktor abstraktní třídy v Javě
Abstraktní třída v Javě jako C ++, až na to, že na rozdíl od C ++ máme v Javě abstraktní klíčové slovo použité k deklaraci abstraktní třídy. Abstraktní třídy v Javě mohou mít konstruktory. Tento konstruktor abstraktní třídy se nazývá, když vytvoříme instanci implementační třídy (která zdědí abstraktní třídu).
Zvažte následující příklad konstruktoru abstraktní třídy.
//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(); } }
Výstup:
Protože nelze vytvořit instanci abstraktní třídy, zdědíme z této abstraktní třídy novou třídu. Výstup programu ukazuje, že když vytvoříme objekt odvozené třídy v hlavní metodě, potom se nejprve zavolá konstruktor abstraktní třídy, následovaný konstruktorem odvozené třídy.
Konstruktor rozhraní v Javě
Rozhraní v Javě jsou podobná abstraktním třídám. Rozhraní jsou ve výchozím nastavení veřejná abstraktní a mají pouze prototypy metod. Tyto prototypy jsou poté implementovány ve třídě, která implementuje rozhraní.
Jsou tedy konstruktéři přítomni v rozhraních?
Ne. Rozhraní nemají konstruktory. Je to proto, že metody v rozhraní jsou jen prototypy, a proto nemusíme vytvářet instanci nebo vytvořit objekt rozhraní, protože ho vůbec nebudeme používat. Není tedy nutné mít v rozhraní ani konstruktor.
Níže uvedený program Java ukazuje tuto logiku.
//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)); } }
Výstup:
Zde máme rozhraní „Interface_add“ s jednou metodou „addNumbers“ prototyp. Potom třída „AddClass“ implementuje toto rozhraní a také metodu addNumbers.
V hlavní metodě je vytvořena instance třídy a metoda je provedena. Proto v tomto rozhraní nevidíme žádnou potřebu konstruktoru.
Nyní pojďme diskutovat o konstruktorech některých již existujících tříd v Java jako String a Array.
Řetězcový konstruktor v Javě
Řetězcový objekt v Javě lze definovat jako objekt třídy String. Třída String poskytuje následující konstruktory pro vytváření a inicializaci objektů String.
Některé z těchto konstruktorů jsou popsány níže:
# 1) Řetězec (bajt () myArray)
Vytvoří nový objekt String z daného bajtového pole. Pro konstrukci objektu řetězce používá výchozí znakovou sadu platformy a dekóduje bajtové pole.
Příklad:
byte() myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) Řetězec (byte () myArray, Charset char_set)
Tento konstruktor konstruuje nový objekt řetězce pomocí char_set zadaného ve volání konstruktoru k dekódování bajtového pole.
Příklad:
byte() myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) Řetězec (char () myArray)
Můžeme postavit objekt String z pole znaků.
Příklad:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) Řetězec (char () myArray, int start_index, int count)
Zde vytvoříme objekt String ze znakového pole zahrnutím počtu znaků od start_index až po počet.
jednoduchý java program pro třídění čísel ve vzestupném pořadí
Příklad:
char myArray() = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) Řetězec (int () intArray, int offset, int count)
Výše uvedený konstruktor přiděluje nový String objekt z pole int. Počet znaků v řetězci je definován offsetem a počtem.
Příklad:
int() intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) Řetězec (StringBuffer strbuffer)
V tomto konstruktoru je nový String objekt vytvořen z objektu StringBuffer.
Příklad:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) String (StringBuilder strbuilder)
Pomocí objektu StringBuilder se vytvoří nový objekt String.
Příklad:
jak napsat selektor css v selenu
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Konstruktory polí v Javě
Pole používají konstruktory k vytvoření a inicializaci polí pomocí nového klíčového slova, jak je znázorněno níže.
int() data = new int(4);
Výše uvedený příkaz inicializuje pole 4 prvků na výchozí hodnotu 0.
Další způsob inicializace pole je uveden níže:
int() data = new int(){2, 4, 6, 8};
Destruktor v Javě
Zatím jsme viděli konstruktory v Javě, pomocí kterých jsme vytvořili objekt. Když objekt dokončí svou úlohu a již se nepožaduje, je třeba uvolnit nebo uvolnit paměť přidělenou objektu. Toto je práce destruktoru v Javě.
V Javě je Garbage Collector odpovědný za uvolnění objektů, které se již nepoužívají nebo se staly nedostupnými. Destruktory v Javě se nazývají finalizátory a jsou nedeterministické, takže nemůžeme zaručit, že budou provedeny.
V Javě si nemusíme dělat starosti s destruktory. Destruktory nemají v Javě konkrétní syntaxi. Objekty jsou zničeny, ale nenazýváme destruktor tak, jak jej nazýváme v C ++.
Jak již bylo zmíněno výše, práci destruktoru provádí finalizátor, který volá Garbage Collector.
Metoda finalizátoru v Javě je níže uvedena pro vaši referenci.
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'); } }
Výstup:
Ve výše uvedeném programu vytvoříme objekt třídy. Nastavit na null a pak zavoláme metodu System.gc (). Nyní je tento objekt nedosažitelný a implicitně se volá metoda finalizace (destruktor).
Metoda Constructor Vs v Javě
Uveďme tabelarizaci některých rozdílů mezi konstruktorem a metodou v Javě.
Konstruktéři | Metoda |
---|---|
Vytvoří nový objekt. | Funguje na již existujícím objektu. |
Blok kódu používaný k inicializaci členů třídy při vytváření objektu. | Kolekce programovacích příkazů, které při spuštění generují výsledek. |
Slouží k provádění inicializace objektů. | Posloupnost příkazů prováděných prostředím Java. Může nebo nemusí obsahovat inicializační rutinu. |
Vyvoláno implicitně. | Musí být explicitně vyvolána v programu. |
Vyvoláno při vytvoření nového objektu pomocí nového klíčového slova. | Vyvoláno, když programátor volá metodu. |
Má stejný název jako třída. | Může mít libovolný název povolený programovacím jazykem. |
Nemá návratový typ. | Musí mít návratový typ, jinak by měl vrátit neplatnost. |
Třída může mít mnoho přetížených konstruktorů. | Třída může mít přetížené i odlišné metody. |
To nemůže být zděděno podřízenou třídou. | Může být zděděno podřízenou třídou a dokonce přepsáno. |
Často kladené otázky
Otázka č. 1) Mohou být konstruktéři soukromí?
Odpovědět: Ano. Konstruktory v Javě mohou být soukromé. Všechny třídy včetně abstraktních tříd mohou mít soukromé konstruktory. Pomocí soukromých konstruktorů můžeme zabránit instanci třídy nebo můžeme omezit počet objektů této třídy.
Otázka 2) Jaké je použití konstruktoru abstraktní třídy v Javě?
Odpovědět: Konstruktor abstraktní třídy se vyvolá, když vytvoříme objekt odvozené třídy, který zdědí abstraktní třídu. Kromě toho, pokud má abstraktní třída nějaké členské proměnné, můžeme je inicializovat v konstruktoru abstraktní třídy.
Otázka č. 3) Můžeme definovat parametrizovaný konstruktor v abstraktní třídě v Javě?
Odpovědět: Ano, můžeme mít parametrizovaný konstruktor v abstraktní třídě. Pak můžeme tento konstruktor zavolat z odvozené třídy, která zdědila abstraktní třídu pomocí volání super ().
Otázka č. 4) Víte, proč v Javě neexistuje Destructor?
Odpovědět: Java nemusí mít konkrétní destruktor, protože má svého sběrače odpadků. Tento garbage collector ničí objekty, které jsou nedosažitelné, a uvolňuje paměť. Metoda s názvem finalize je také součástí garbage collector, který se provádí nedeterministicky a vykonává funkci destruktoru, jako je uvolňování prostředků atd.
Otázka č. 5) Může mít Abstraktní třída tělo?
Odpovědět: Ne. Abstraktní třída může mít pouze deklarace metod a konstruktory. Jeho metody nejsou implementovány. Třída, která dědí tuto abstraktní třídu, implementuje metody. Kromě prototypu nebo deklarací může mít také specifikátory viditelnosti nebo přístupu.
Závěr
Tím je náš výukový program konstruktorů v Javě dokončen. Zde jsme pokryli definici, vytvoření a typy konstruktorů. Také jsme diskutovali o přetížení konstruktoru a řetězení konstruktorů v Javě.
Prozkoumali jsme abstraktní a soukromé konstruktory v Javě a zjistili jsme, proč rozhraní nemohou mít konstruktory. Viděli jsme konstruktory, které se používají ve třídách array a String.
Také jsme diskutovali o destruktorech v Javě, které plní opačnou funkci než konstruktory. Konstruktéři vytvářejí objekty, zatímco ničitelé ničí objekty. V Javě je funkce destruktoru prováděna finalizátorem, který je prováděn během uvolňování paměti.
Takže v Javě nemáme konkrétní destruktor a nemusíme jej definovat tak, jak to děláme v C ++. Také jsme diskutovali o rozdílech mezi metodou a konstruktorem. Víme, že konstruktor není stejný jako metoda, ale můžeme jej zobrazit jako speciální metodu.
=> Přečtěte si řadu Easy Java Training Series.
Doporučené čtení
- Konstruktor Java - konstruktory třídy, kopie a výchozí
- C # koncepty: konstruktor, destruktor, statická třída, struktura a výčet
- Výukový program Java String Array - příklady kódu
- Výukový program Java String s funkcí String Buffer a String Builder
- Metoda délky Java String () S příklady
- Java String obsahuje () Výukový program metod s příklady
- Metoda Java String indexOf s příklady kódu
- Metoda Java String compareTo s příklady programování