1. Utwórz obiekt
Tutaj dochodzimy do tworzenia obiektów. Spotkałeś się już z tym wcześniej, ale teraz przeanalizujemy ten temat bardziej szczegółowo. W rzeczywistości bardzo łatwo jest tworzyć obiekty.
Aby utworzyć obiekt, musisz użyć operatora new . Tworzenie obiektu wygląda następująco:
new Класс(параметры)
Najczęściej zaraz po utworzeniu obiektu zapisujemy odniesienie do niego w zmiennej, która również bardzo często ma ten sam typ co tworzony obiekt. Dlatego zwykle widzisz kod tworzenia obiektów w następujący sposób:
Класс Nazwa = new Класс(параметры)
Gdzie jest tworzenie nowej zmiennej, a kod po prawej stronie znaku równości to tworzenie nowego obiektu typu .Класс Nazwa
Класс
Przykłady:
Kod | Notatka |
---|---|
|
Tworzenie obiektu typuObject |
|
Tworzenie obiektu typuCat |
|
Tworzenie obiektu typuScanner |
Bardzo często programiści nazywają zmienne tymi samymi nazwami co klasy, tylko małymi literami. Dla początkującego programisty ten kod może być mylący:
Kod |
---|
|
|
|
W rzeczywistości nie ma nic strasznego w tym kodzie - jest to najczęstszy kod, w którym tworzona jest zmienna i natychmiast inicjowana obiektem własnego typu.
Na lewo od znaku równości znajduje się tworzenie zmiennej. Po prawej stronie jest tworzenie obiektu. Wszystko.
2. Konstruktor
Prawdopodobnie często widziałeś, że podczas tworzenia obiektu przekazywane są do niego pewne parametry. Ponadto parametry są przekazywane do niektórych obiektów, a do innych nie. Jak ogólnie działa ten cały mechanizm z parametrami?
Tutaj również wszystko jest proste: każda klasa ma specjalną metodę (lub metody), które są odpowiedzialne za przetwarzanie parametrów podczas tworzenia obiektu. Takie metody nazywane są konstruktorami . A jedną z metod jest odpowiednio konstruktor .
Łatwo jest odróżnić metodę konstruktora od normalnej metody w kodzie. Ta metoda ma dwie cechy:
- nazwa metody konstruktora jest taka sama jak nazwa jej klasy (i zaczyna się wielką literą)
- Metoda konstruktora nie ma zwracanego typu.
Jego ogólna postać jest zwykle taka:
модификаторы Класс(параметры)
{
kod
}
Przykład:
Kod | Notatka |
---|---|
|
Point Klasa Konstruktor klasy Point |
|
Tworząc obiekt klasy Point , zostanie wywołany konstruktor klasy. |
Zwróć uwagę, jak wygląda metoda konstruktora: nie ma typu wyniku, a jej nazwa jest taka sama jak nazwa-klasy.
I jeszcze jedno: spójrz na kod wewnątrz konstruktora. Zmienne parametrów konstruktora mają takie same nazwy jak pola klasy - x, y. Standardową praktyką jest nie wymyślanie nazw zmiennych. Te same nazwy są traktowane jako pola klasy, a konflikt nazw jest rozwiązywany za pomocą słowa kluczowego this.
3. Wywołanie konstruktora
Kiedy tworzysz nowy obiekt z operatorem new i poleceniem takim jak „new Class ( parametry )”, dzieją się dwie rzeczy:
- Maszyna Java tworzy obiekt typu Class
- Maszyna Java wywołuje konstruktor obiektu i przekazuje tam twoje parametry .
Jako programista decydujesz, jakie konstruktory powinna mieć twoja klasa i jakie parametry powinny mieć te konstruktory.
Załóżmy, że postanawiasz utworzyć klasę do śledzenia kotów w schronisku dla zwierząt. Wtedy twoja klasa Cat
może wyglądać tak:
|
|
|
Jest to więc możliwe |
|
I tak - to niemożliwe. Kod się nie skompiluje. |
|
I tak jest to niemożliwe. Kod się nie skompiluje. |
Klasa ma Cat
tylko jednego konstruktora z parametrami nazwa i wiek. Ponieważ name
nie ma innych konstruktorów, musisz podać imię ( ) i wiek ( ) kota jako parametry podczas tworzenia obiektu age
. Nie możesz przekazać parametrów do konstruktora.
4. Wiele konstruktorów
Jeśli jednak zajdzie taka potrzeba, możesz dodać do klasy wiele konstruktorów. Nie ma ograniczeń co do liczby konstruktorów ani ich parametrów. Podczas tworzenia obiektu kompilator sam dobierze odpowiedni konstruktor dla parametrów.
Kod | Notatka |
---|---|
|
|
|
Więc możesz: zostanie wywołany pierwszy konstruktor |
|
Jest więc możliwe: zostanie wywołany drugi konstruktor |
|
I tak - to niemożliwe. Kod się nie skompiluje. |
Postanowiliśmy wziąć pod uwagę sytuację, że wiek kota może być nieznany. W tym przypadku dodaliśmy do kodu specjalną stałą - UNKNOWN
i konstruktora, który przyjmuje tylko jeden parametr - nazwę kota.
Zauważ, że nadal inicjujemy obie zmienne klasy wewnątrz obu konstruktorów. Zastępujemy nieznane/brakujące parametry stałą UNKNOWN
.
Jeśli do zmiennej wieku nie zostanie przypisana żadna wartość, zostanie zachowana wartość domyślna == 0. Ale kociak znaleziony na ulicy może równie dobrze mieć 0 pełnych lat. Dlatego zero w zmiennej wieku niekoniecznie oznacza „nieznany wiek”.
5. Konstruktor domyślny
Jeśli chcesz, aby obiekty klasy były tworzone bez żadnych parametrów, musisz zadeklarować konstruktor bez parametrów dla swojej klasy.
Konstruktor bez parametrów niekoniecznie jest konstruktorem bez kodu, może równie dobrze zawierać kod inicjujący zmienne klasy z wartościami początkowymi:
Kod | Notatka |
---|---|
|
|
|
Więc możesz: zostanie wywołany pierwszy konstruktor |
|
Jest więc możliwe: zostanie wywołany drugi konstruktor |
Konstruktor domyślny
Jest bardzo ważny punkt, o którym powinniście wiedzieć i pamiętać.
Jeśli twoja klasa w ogóle nie ma konstruktora , kompilator doda do twojej klasy domyślny konstruktor - konstruktor bez parametrów i kodu, ale z modyfikatorem public.
Jeśli jednak twoja klasa ma co najmniej jednego konstruktora , domyślny konstruktor nie będzie już dodawany — musisz go dodać samodzielnie.
Kod | Notatka |
---|---|
|
|
|
Więc możesz: zostanie wywołany domyślny konstruktor |
GO TO FULL VERSION