private abstract array
W tym samouczku omówimy specjalne konstruktory, takie jak prywatny konstruktor w języku Java, abstrakcyjny, ciąg, tablica, interfejs i niszczyciel w języku Java:
W naszym ostatnim samouczku dotyczącym konstruktorów w Javie poznaliśmy ważne pojęcia związane z konstruktorami w Javie. Omówiliśmy, jak stworzyć konstruktora i zasady definiowania konstruktorów, wraz z typami konstruktorów itp.
Nauczyliśmy się także przeciążania konstruktorów i łączenia konstruktorów. Omówmy teraz pewne specjalne konstruktory, takie jak konstruktor prywatny, konstruktor abstrakcyjny oraz konstruktory ciągów i tablic w Javie. Następnie omówimy destruktory w Javie i na koniec zbadamy różnice między metodą a konstruktorami.
=> Zapoznaj się z podręcznikiem Java dla początkujących tutaj.
Zacznijmy od prywatnego konstruktora w Javie.
Czego się nauczysz:
- Prywatny konstruktor w Javie
- Konstruktor klasy abstrakcyjnej w Javie
- Konstruktor interfejsu w Javie
- Konstruktor ciągów w Javie
- Konstruktory tablic w Javie
- Destructor w Javie
- Metoda Konstruktor Vs w Javie
- Często Zadawane Pytania
- Wniosek
- rekomendowane lektury
Prywatny konstruktor w Javie
Jak już wspomniano, konstruktory w klasie Java mogą mieć skojarzone z nimi specyfikatory dostępu. Stąd możemy mieć konstruktorów, które są prywatne lub publiczne. Omówimy więcej na temat specyfikatorów dostępu w naszych kolejnych samouczkach, a także ponownie zajmiemy się konstruktorami.
Gdy konstruktor jest zadeklarowany jako prywatny, można uzyskać do niego dostęp tylko wewnątrz klasy. Nie może uzyskać dostępu do klas pochodnych za pośrednictwem innej klasy. Dlatego musimy zapewnić publiczną metodę w klasie, która ma prywatne konstruktory, aby ta publiczna metoda miała dostęp do prywatnych konstruktorów.
W Javie prywatny konstruktor może być używany w następujących sytuacjach:
- Do implementacji singletonów.
- Do wprowadzania metod fabrycznych.
- Dla klas, które mają tylko statyczne elementy członkowskie (zmienne i metody).
- Na zajęcia z członkami końcowymi. (stałe - końcowe i statyczne).
- Aby użyć wyliczeń bezpiecznych dla typu.
Jako przykład , weźmy klasę singletona. Klasa pojedyncza to klasa, która w danym momencie dopuszcza tylko jeden obiekt. Możemy użyć prywatnego konstruktora, aby upewnić się, że nie pozwolimy na utworzenie więcej niż jednego obiektu.
Poniższy program implementuje klasę pojedynczą przy użyciu prywatnego konstruktora.
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(); } }
Wynik:
Powyższy program deklaruje klasę pojedynczą. Udostępniliśmy prywatnego konstruktora i metodę publiczną, aby uzyskać dostęp do prywatnego konstruktora, a także ograniczyć liczbę obiektów do jednego. W metodzie głównej wykonujemy metodę publiczną, aby utworzyć obiekt klasy pojedynczej.
Konstruktor klasy abstrakcyjnej w Javie
Klasa abstrakcyjna w Javie jako C ++ z tą różnicą, że w przeciwieństwie do C ++, w Javie mamy słowo kluczowe abstract używane do deklarowania klasy abstrakcyjnej. Klasy abstrakcyjne w Javie mogą mieć konstruktory. Ten konstruktor klasy abstrakcyjnej jest wywoływany, gdy tworzymy wystąpienie klasy implementacyjnej (która dziedziczy klasę abstrakcyjną).
Rozważmy następujący przykład konstruktora klasy abstrakcyjnej.
//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(); } }
Wynik:
Ponieważ nie można utworzyć instancji klasy abstrakcyjnej, dziedziczymy nową klasę z tej klasy abstrakcyjnej. Dane wyjściowe programu pokazują, że kiedy tworzymy obiekt klasy pochodnej w metodzie main, najpierw wywoływany jest konstruktor klasy abstrakcyjnej, a po nim konstruktor klasy pochodnej.
Konstruktor interfejsu w Javie
Interfejsy w Javie są podobne do klas abstrakcyjnych. Interfejsy są domyślnie publiczne i mają tylko prototypy metod. Te prototypy są następnie implementowane w klasie implementującej interfejs.
Czy więc konstruktory są obecne w interfejsach?
Nie. Interfejsy nie mają konstruktorów. Dzieje się tak, ponieważ metody w interfejsie są tylko prototypami i dlatego nie musimy tworzyć instancji ani tworzyć obiektu interfejsu, ponieważ w ogóle nie będziemy go używać. Nie ma więc potrzeby posiadania konstruktora w interfejsie.
Poniższy program w języku Java demonstruje tę 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)); } }
Wynik:
Tutaj mamy interfejs „Interface_add” z jednym prototypem metody „addNumbers”. Następnie klasa „AddClass” implementuje ten interfejs, a także metodę addNumbers.
W metodzie main tworzona jest instancja klasy i metoda jest wykonywana. Dlatego nie widzimy potrzeby konstruktora w tym interfejsie.
Omówmy teraz konstruktory niektórych wcześniej istniejących klas w ciągach i tablicach podobnych do języka Java.
Konstruktor ciągów w Javie
Obiekt typu string w Javie można zdefiniować jako obiekt klasy String. Klasa String udostępnia następujące konstruktory do tworzenia i inicjowania obiektów String.
Poniżej omówiono niektóre z tych konstruktorów:
# 1) Ciąg (bajt [] moja tablica)
Konstruuje nowy obiekt String z podanej tablicy bajtów. Do konstruowania obiektu ciągu używa domyślnego zestawu znaków platformy i dekoduje tablicę bajtów.
Przykład:
byte[] myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) Ciąg (bajt [] moja tablica, zestaw znaków znaków)
Ten konstruktor konstruuje nowy obiekt ciągu przy użyciu zestawu znaków_znaków określonego w wywołaniu konstruktora w celu zdekodowania tablicy bajtów.
Przykład:
byte[] myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) String (char [] myArray)
Możemy skonstruować obiekt String z tablicy znaków.
Przykład:
char myArray[] = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) String (char [] myArray, int start_index, int count)
Tutaj tworzymy obiekt String z tablicy znaków, włączając liczbę znaków od start_index do liczby.
Przykład:
char myArray[] = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) String (int [] intArray, int offset, int count)
Powyższy konstruktor przydziela nowy obiekt String z tablicy int. Liczba znaków w ciągu jest określona przez przesunięcie i liczbę.
Przykład:
int[] intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) Ciąg (StringBuffer strbuffer)
W tym konstruktorze nowy obiekt String jest konstruowany z obiektu StringBuffer.
Przykład:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) Ciąg (StringBuilder strbuilder)
Nowy obiekt String jest tworzony przy użyciu obiektu StringBuilder.
Przykład:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Konstruktory tablic w Javie
Tablice używają konstruktorów do tworzenia i inicjowania tablic przy użyciu nowego słowa kluczowego, jak pokazano poniżej.
int[] data = new int[4];
Powyższa instrukcja inicjalizuje tablicę 4 elementów do domyślnego 0.
Poniżej przedstawiono inny sposób inicjalizacji tablicy:
int[] data = new int[]{2, 4, 6, 8};
Destructor w Javie
Do tej pory widzieliśmy konstruktory w Javie, za pomocą których tworzymy obiekt. Gdy obiekt zakończy swoje zadanie i nie jest już potrzebny, należy zwolnić lub zwolnić pamięć przydzieloną obiektowi. To jest zadanie destruktora w Javie.
W Javie Garbage Collector jest odpowiedzialny za zwalnianie obiektów, które nie są już używane lub stały się nieosiągalne. Destruktory w Javie nazywane są finalizatorami i nie są deterministyczne, więc nie możemy zagwarantować, że zostaną wykonane.
W Javie nie musimy martwić się o destruktory. Destruktory nie mają określonej składni w Javie. Obiekty są niszczone, ale nie nazywamy destruktora w taki sposób, w jaki nazywamy go w C ++.
Jak wspomniano powyżej, funkcja destruktora jest wykonywana przez finalizator, który jest wywoływany przez Garbage Collector.
Poniżej przedstawiono metodę finalizatora w Javie w celach informacyjnych.
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'); } }
Wynik:
W powyższym programie tworzymy obiekt klasy. Ustaw ją na null, a następnie wywołamy metodę System.gc (). Teraz ten obiekt jest nieosiągalny, a metoda finalize (destruktor) jest niejawnie wywoływana.
Metoda Konstruktor Vs w Javie
Przedstawmy w tabeli niektóre różnice między konstruktorem a metodą w Javie.
Konstruktorzy | metoda |
---|---|
Tworzy nowy obiekt. | Działa na już istniejącym obiekcie. |
Blok kodu używany do inicjowania członków klasy podczas tworzenia obiektu. | Zbiór instrukcji programowania, które generują wynik po wykonaniu. |
Służy do wykonywania inicjalizacji obiektów. | Sekwencja instrukcji wykonywanych przez Javę. Może zawierać procedurę inicjalizacji lub nie. |
Wywołane niejawnie. | Musi być wywołany jawnie w programie. |
Wywoływane, gdy nowy obiekt jest tworzony przy użyciu nowego słowa kluczowego. | Wywoływane, gdy metoda jest wywoływana przez programistę. |
Ma taką samą nazwę jak nazwa klasy. | Może mieć dowolną nazwę dozwoloną przez język programowania. |
Nie ma typu zwracanego. | Musi mieć zwracany typ, inaczej powinien zwracać void. |
Klasa może mieć wiele przeciążonych konstruktorów. | Klasa może mieć zarówno przeciążone, jak i różne metody. |
Nie może być dziedziczona przez klasę podrzędną. | Może zostać odziedziczona przez klasę podrzędną, a nawet zastąpiona. |
Często Zadawane Pytania
P # 1) Czy konstruktorzy mogą być prywatni?
Odpowiedź: Tak. Konstruktory w Javie mogą być prywatne. Wszystkie klasy, w tym klasy abstrakcyjne, mogą mieć konstruktory prywatne. Korzystając z prywatnych konstruktorów możemy zapobiec tworzeniu instancji klasy lub ograniczyć liczbę obiektów tej klasy.
P # 2) Jakie jest zastosowanie konstruktora klas abstrakcyjnych w Javie?
Odpowiedź: Konstruktor klasy abstrakcyjnej jest wywoływany, gdy tworzymy obiekt klasy pochodnej, która dziedziczy klasę abstrakcyjną. Poza tym, jeśli klasa abstrakcyjna ma jakieś zmienne składowe, możemy je zainicjować w konstruktorze klasy abstrakcyjnej.
najlepsze studia gier do pracy
Q # 3) Czy możemy zdefiniować sparametryzowany konstruktor w klasie abstrakcyjnej w Javie?
Odpowiedź: Tak, możemy mieć sparametryzowany konstruktor w klasie abstrakcyjnej. Następnie możemy wywołać ten konstruktor z klasy pochodnej, która odziedziczyła klasę abstrakcyjną za pomocą wywołania super ().
Pytanie 4) Czy wiesz, dlaczego w Javie nie ma destruktora?
Odpowiedź: Java nie musi mieć określonego destruktora, ponieważ ma swój garbage collector. Ten odśmiecacz niszczy obiekty, które są nieosiągalne i zwalnia pamięć. Metoda o nazwie finalize jest również częścią garbage collectora, która wykonuje niedeterministycznie i pełni funkcję destruktora, jak zwalnianie zasobów itp.
P # 5) Czy klasa abstrakcyjna może mieć ciało?
Odpowiedź: Nie. Klasa abstrakcyjna może mieć tylko deklaracje metod i konstruktory. Jego metody nie są zaimplementowane. Klasa, która dziedziczy tę klasę abstrakcyjną, implementuje metody. Oprócz prototypu lub deklaracji może mieć również specyfikatory widoczności lub dostępu.
Wniosek
To kończy nasz samouczek dotyczący konstruktorów w Javie. Tutaj omówiliśmy definicję, tworzenie i typy konstruktorów. Omówiliśmy również przeciążanie konstruktorów i tworzenie łańcuchów konstruktorów w Javie.
Zbadaliśmy abstrakcyjne i prywatne konstruktory w Javie i dowiedzieliśmy się, dlaczego interfejsy nie mogą mieć konstruktorów. Widzieliśmy konstruktory używane w klasach array i String.
Omówiliśmy również destruktory w Javie, które pełnią funkcję odwrotną do konstruktorów. Konstruktorzy tworzą obiekty, podczas gdy destruktory niszczą obiekty. W Javie funkcja destruktora jest wykonywana przez finalizator, który jest wykonywany podczas czyszczenia pamięci.
Dlatego w Javie nie mamy konkretnego destruktora i nie musimy go definiować tak, jak robimy to w C ++. Omówiliśmy również różnice między metodą a konstruktorem. Wiemy, że konstruktor to nie to samo, co metoda, ale możemy postrzegać konstruktor jako metodę specjalną.
=> Przeczytaj serię szkoleń Easy Java.
rekomendowane lektury
- Java Constructor - konstruktory klas, kopii i domyślnych
- Pojęcia w języku C #: konstruktor, niszczyciel, klasa statyczna, struktura i wyliczenie
- Java String Array - samouczek z przykładami kodu
- Ciąg w języku Java z buforem ciągów i samouczek dotyczący tworzenia ciągów
- Metoda Java String length () z przykładami
- Java String zawiera () Samouczek dotyczący metody z przykładami
- Metoda Java String indexOf z przykładami kodu
- Metoda Java String compareTo z przykładami programowania