Konstruktor Java tworzy nową instancję już zdefiniowanego obiektu. W tym artykule opisano, jak używać metod konstruktora Java do tworzenia obiektu Person.
Uwaga: W tym przykładzie musisz utworzyć dwa pliki w tym samym folderze: Person.java definiuje klasę Person, oraz PersonExample.java zawiera główna metoda który tworzy obiekty Person.
Metoda konstruktora
Zacznijmy od utworzenia klasy Person, która ma cztery prywatne pola: imię, nazwisko, adres i nazwa użytkownika. Te pola są zmiennymi prywatnymi i razem ich wartości składają się na stan obiektu. Dodaliśmy również najprostszą z metod konstruktora:
osoba publiczna {
private String firstName;
prywatny ciąg LastName;
prywatny ciąg znaków;
prywatna nazwa użytkownika typu String;
// Konstruktor
osoba publiczna ()
{
}
}
Metoda konstruktora jest podobna do każdej innej metody publicznej, z tym wyjątkiem, że ma tę samą nazwę co klasa i nie może zwrócić wartości. Może mieć brak jednego, jednego lub wielu parametrów.
Obecnie nasza metoda konstruktora nic nie robi i jest to dobry moment, aby zastanowić się, co to oznacza dla początkowego stanu obiektu Person. Jeśli pozostawiliśmy rzeczy takimi, jakie są, lub nie umieściliśmy metody konstruktora w naszej klasie Person (w
Jawa możesz zdefiniować klasę bez niej), wówczas pola nie miałyby żadnych wartości - i na pewno chcemy, aby nasza osoba miała imię i adres, a także inne cechy. Jeśli uważasz, że istnieje szansa, że Twój obiekt nie będzie używany zgodnie z oczekiwaniami, a pola mogą nie zostać zainicjowane podczas tworzenia obiektu, zawsze zdefiniuj je za pomocą wartości domyślnej:osoba publiczna {
private String firstName = "";
private String lastName = "";
private String address = "";
prywatny ciąg nazwa użytkownika = "";
// Konstruktor
osoba publiczna ()
{
}
}
Zwykle, aby upewnić się, że metoda konstruktora jest użyteczna, zaprojektujemy ją tak, aby oczekiwała parametrów. Wartości przekazane przez te parametry można wykorzystać do ustawienia wartości pól prywatnych:
osoba publiczna {
private String firstName;
prywatny ciąg LastName;
prywatny ciąg znaków;
prywatna nazwa użytkownika typu String;
// Konstruktor
public Person (String personFirstname, String personLastName, String personAddress, String personUsername
{
firstName = personFirstName;
lastName = personLastName;
adres = personAddress;
nazwa użytkownika = personUsername;
}
// Metoda wyświetlania stanu obiektu na ekranie
public void displayPersonDetails ()
{
System.out.println („Name:” + firstName + „” + lastName);
System.out.println („Adres:” + adres);
System.out.println („Nazwa użytkownika:” + nazwa użytkownika);
}
}
Nasza metoda konstruktora oczekuje teraz, że zostaną do niej przekazane wartości czterech łańcuchów. Są one następnie używane do ustawiania stanu początkowego obiektu. Dodaliśmy również nową metodę o nazwie displayPersonDetails () abyśmy mogli zobaczyć stan obiektu po jego utworzeniu.
Wywołanie metody konstruktora
W przeciwieństwie do innych metod obiektu metodę konstruktora należy wywołać za pomocą słowa kluczowego „new”:
klasa publiczna PersonExample {
public static void main (String [] args) {
Osoba dave = nowa osoba („Dave”, „Davidson”, „12 Main St.”, „DDavidson”);
dave.displayPersonDetails ();
}
}
Oto co zrobiliśmy:
- Aby utworzyć nową instancję obiektu Person, najpierw definiujemy zmienną typu Person, która będzie przechowywać obiekt. W tym przykładzie nazwaliśmy to Dave.
- Po drugiej stronie znaku równości wywołujemy metodę konstruktora naszej klasy Person i przekazujemy jej cztery wartości łańcuchowe. Nasza metoda konstruktora pobierze te cztery wartości i ustawi początkowy stan obiektu Person na: firstName = "Dave", lastName = "Davidson", address = "12 Main St", nazwa użytkownika = "DDavidson".
Zauważ, jak przeszliśmy na główną klasę Java, aby wywołać obiekt Person. Podczas pracy z obiektami programy będą się rozciągać wiele plików .java. Upewnij się, że zapisałeś je w tym samym folderze. Aby skompilować i uruchomić program, po prostu skompiluj i uruchom Javę główna klasa plik (tj. PersonExample.java). Kompilator Java jest wystarczająco inteligentny, aby zdać sobie sprawę, że chcesz go skompilować Person.java plik, ponieważ może zobaczyć, że użyłeś go w klasie PersonExample.
Nazewnictwo parametrów
Kompilator Java jest zdezorientowany, jeśli parametry metody konstruktora mają takie same nazwy jak pola prywatne. W tym przykładzie widać, że rozróżniliśmy je, poprzedzając parametry słowem „osoba”. Warto wspomnieć, że jest inny sposób. Zamiast tego możemy użyć słowa kluczowego „to”:
// Konstruktor
public Person (String firstName, String lastName, String string, String username)
{
this.firstName = firstName;
this.lastName = lastName;
this.address = adres;
this.username = nazwa użytkownika;
}
Słowo kluczowe „this” informuje kompilator Java, że zmienna, której należy przypisać wartość, jest zmienną zdefiniowaną przez klasę, a nie parametr. To kwestia stylu programowania, ale ta metoda pomaga nam zdefiniować parametry konstruktora bez konieczności używania wielu nazw.
Więcej niż jedna metoda konstruktora
Projektując klasy obiektów, nie jesteś ograniczony do użycia tylko jednej metody konstruktora. Możesz zdecydować, że istnieje kilka sposobów inicjalizacji obiektu. Jedynym ograniczeniem w stosowaniu więcej niż jednej metody konstruktora jest to, że parametry muszą się różnić.
Wyobraź sobie, że w momencie tworzenia obiektu Osoba możemy nie znać nazwy użytkownika. Dodajmy nową metodę konstruktora, która ustawia stan obiektu Person, używając tylko firstName, lastName i adresu:
osoba publiczna {
private String firstName;
prywatny ciąg LastName;
prywatny ciąg znaków;
prywatna nazwa użytkownika typu String;
// Konstruktor
public Person (String firstName, String lastName, String string, String username)
{
this.firstName = firstName;
this.lastName = lastName;
this.address = adres;
this.username = nazwa użytkownika;
}
// Nowa metoda konstruktora
public Person (String firstName, String lastName, String string)
{
this.firstName = firstName;
this.lastName = lastName;
this.address = adres;
this.username = "";
}
// Metoda wyświetlania stanu obiektu na ekranie
public void displayPersonDetails ()
{
System.out.println („Name:” + firstName + „” + lastName);
System.out.println („Adres:” + adres);
System.out.println („Nazwa użytkownika:” + nazwa użytkownika);
}
}
Zauważ, że druga metoda konstruktora jest również nazywana „Osoba” i również nie zwraca wartości. Jedyną różnicą między nim a pierwszą metodą konstruktora są parametry - tym razem oczekuje tylko trzy wartości ciągów: firstName, lastName i adres.
Możemy teraz tworzyć obiekty Person na dwa różne sposoby:
klasa publiczna PersonExample {
public static void main (String [] args) {
Osoba dave = nowa osoba („Dave”, „Davidson”, „12 Main St.”, „DDavidson”);
Osoba jim = nowa osoba („Jim”, „Davidson”, „15 Kings Road”);
dave.displayPersonDetails ();
jim.displayPersonDetails ();
}
}
Osoba Dave zostanie utworzony z imieniem, nazwiskiem, adresem i nazwą użytkownika. Osoba Jim, jednak nie otrzyma nazwy użytkownika, tj. nazwa użytkownika będzie pustym ciągiem: nazwa użytkownika = "".
Szybkie podsumowanie
Metody konstruktora są wywoływane tylko wtedy, gdy tworzona jest nowa instancja obiektu. One:
- Musi mieć taką samą nazwę jak klasa
- Nie zwracaj wartości
- Może nie mieć żadnego, jednego lub wiele parametrów
- Może numerować więcej niż jeden, o ile każda metoda konstruktora ma inny zestaw parametrów
- Może mieć nazwy parametrów to samo co pola prywatne, o ile używane jest słowo kluczowe „to”
- Są wywoływane przy użyciu słowa kluczowego „new”