Co to jest konstruktor w Javie i jak go używać?

Co to jest konstruktor w Javie i jak go używać?

W programowaniu obiektowym konstruktor jest specjalną funkcją, którą wywołujesz w celu utworzenia obiektu. Konstruktorzy mają kilka unikalnych cech, które umożliwiają im pracę.





W Javie nazywasz konstruktora po jego klasie. Konstruktor to metoda zdefiniowana w klasie, której dotyczy. Konstruktorzy Java mogą używać przeciążania, aby zapewnić alternatywne zachowanie. Konstruktorzy w Javie mogą również wykorzystać dziedziczenie do ponownego wykorzystania kodu.





Dlaczego mimo wszystko potrzebujesz konstruktorów?

Konstruktory są podstawą programowania obiektowego, a Java nie jest wyjątkiem. Ten przykład pokazuje, jak zdefiniować podstawową klasę Circle z jedną właściwością danych i jedną metodą:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Następnie możesz utworzyć instancję tej klasy i wchodzić z nią w interakcję:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

Ale jest to mniej wygodne i solidne, niż mogłoby być. Dobrą praktyką zorientowaną obiektowo jest enkapsulacja danych, chroniąca je przed nieautoryzowanym dostępem:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Teraz kod wywołujący może używać ustaw promień metody i nie musisz martwić się o szczegóły jej realizacji:

jak przenieść z iPoda do iTunes
Circle c = new Circle();
c.setRadius(2);

Konstruktory oferują jeszcze lepszy sposób dostarczania danych do obiektu podczas jego tworzenia. Są bardzo często używane do inicjalizacji właściwości, takich jak promień tutaj.





Przykłady prostych konstruktorów

Najbardziej podstawowy konstruktor to taki, który nie ma żadnych argumentów i nic nie robi:

public class Circle {
public Circle() {}
}

Zobacz też: Dowiedz się, jak tworzyć klasy w Javie





Jeśli nie zdefiniujesz konstruktora, Java zapewni domyślny, który zachowuje się w ten sam sposób.

Zwróć uwagę na kilka rzeczy:

  1. Nazwa konstruktora odpowiada nazwie klasy.
  2. Ten konstruktor używa publiczny modyfikator dostępu, więc każdy inny kod może go wywołać.
  3. Konstruktor nie zawiera zwracanego typu. W przeciwieństwie do innych metod, konstruktory nie mogą zwracać wartości.

Konstruktorzy zazwyczaj przeprowadzają pewien rodzaj inicjalizacji. Zauważ, że powyższy kod nie inicjuje wartości promienia. W takim przypadku język automatycznie ustawi go na zero. Ta klasa oczekuje, że użytkownik będzie używał ustaw promień() . Aby użyć bardziej użytecznej wartości domyślnej niż 0, możesz przypisać ją w konstruktorze:

public class Circle {
public Circle() { radius = 1; }
}

Kręgi utworzone za pomocą tej klasy przynajmniej teraz będą miały rzeczywisty obszar! Rozmówca może nadal korzystać ustaw promień() podać promień inny niż 1. Ale konstruktor może być jeszcze bardziej przyjazny:

public class Circle {
public Circle(double r) { radius = r; }
}

Teraz możesz tworzyć kręgi o określonym promieniu już od urodzenia:

dlaczego imessage nie działa na Macu
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Jest to bardzo powszechne zastosowanie dla konstruktorów. Często będziesz ich używać do inicjowania zmiennych do wartości parametrów.

Przeciążenie konstruktora

W definicji klasy możesz określić więcej niż jednego konstruktora:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

Daje to wywoływanemu kodowi wybór sposobu konstruowania obiektów:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

Dzięki nieco bardziej złożonemu Circle możesz odkrywać ciekawsze konstruktory. Ta wersja przechowuje swoją pozycję:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

Możesz teraz utworzyć Okrąg bez argumentów, pojedynczy promień lub współrzędne xiy wzdłuż promienia. Jest to ten sam rodzaj przeciążania, który Java obsługuje dla dowolnej metody.

Łączenie konstruktorów

Co powiesz na stworzenie jednego Kręgu, opartego na innym? Dałoby nam to możliwość łatwego kopiowania kręgów. Przestrzegaj następującego bloku:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

To zadziała, ale niepotrzebnie powtarza jakiś kod. Ponieważ klasa Circle ma już konstruktor, który obsługuje poszczególne właściwości, możesz go wywołać, używając ten słowo kluczowe:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Jest to jedna forma tworzenia łańcucha konstruktorów, wywołująca jeden konstruktor z innego. Używa mniej kodu i pomaga scentralizować operację, zamiast ją duplikować.

Dzwonienie do konstruktora nadrzędnego

Inna forma tworzenia łańcucha konstruktorów występuje, gdy konstruktor wywołuje konstruktor swojej klasy nadrzędnej. Może to być zarówno jawne, jak i dorozumiane. Aby jawnie wywołać konstruktor nadrzędny, użyj Super słowo kluczowe:

super(x, y);

Wyobraź sobie klasę Shape działającą jako rodzic okręgu:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Obsługuje wspólne pozycjonowanie dla wszystkich kształtów, ponieważ jest to wspólna funkcjonalność. Teraz klasa Circle może delegować obsługę pozycji do swojego rodzica:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Budownictwo superklasowe jest bardzo ważnym aspektem dziedziczenie w języku Java . Język wymusza to domyślnie, jeśli nie zadzwonisz wyraźnie Super w twoich konstruktorach.

Modyfikatory dostępu w konstruktorach

Konstruktorzy mogą zawierać w swoim podpisie modyfikator dostępu. Podobnie jak inne metody, definiuje to, które typy wywołującego mogą uzyskać dostęp do konstruktora:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

To jest bardziej skomplikowany przykład, więc staraj się go zrozumieć:

  • Klasa nie jest abstrakcyjna, więc można z niej tworzyć instancje.
  • Konstruktor jest prywatny, więc tylko ta klasa może utworzyć nową instancję.
  • Za pomocą statycznej właściwości i metody klasa udostępnia wywołującym pojedynczą, unikatową instancję.

Użyj konstruktorów w Javie do tworzenia obiektów

Konstruktory są niezbędne w programowaniu obiektowym. Pozwalają tworzyć przedmioty, co jest niezbędne!

W Javie konstruktory wyglądają jak inne metody i działają w bardzo podobny sposób. Należy pamiętać o specjalnych zasadach dotyczących konstruktorów domyślnych, przeciążania i tworzenia łańcuchów konstruktorów. Jeśli konstruktorzy są dla Ciebie nowicjuszami, możesz poczytać o innych podstawowych koncepcjach Javy, których powinieneś się nauczyć na początku.

Udział Udział Ćwierkać E-mail 10 podstawowych pojęć związanych z Javą, których powinieneś się nauczyć na początku

Niezależnie od tego, czy piszesz GUI, tworzysz oprogramowanie po stronie serwera, czy aplikację mobilną na Androida, nauka Java będzie Ci dobrze służyć. Oto kilka podstawowych pojęć związanych z Javą, które pomogą Ci zacząć.

Czytaj dalej
Powiązane tematy
  • Programowanie
  • Jawa
  • Wskazówki dotyczące kodowania
O autorze Bobby Jack(58 opublikowanych artykułów)

Bobby jest entuzjastą technologii, który przez prawie dwie dekady pracował jako programista. Pasjonuje się grami, pracuje jako redaktor recenzji w magazynie Switch Player i jest zanurzony we wszystkich aspektach publikowania online i tworzenia stron internetowych.

zobacz kto przestał Cię obserwować na instagramie
Więcej od Bobby'ego Jacka

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować