Konstruktory w JAVA
W poprzednich przykładach zmienne składowe obiektów klasy Vehicle musieliśmy inicjować za pomocą sekwencji instrukcji przedstawionych poniżej:
minivan.fuelcap = 65;
minivan.lkm = 9.1;
Takiego rozwiązania nie spotkasz w żadnym profesjonalnym kodzie Java. Nie tylko dlatego, że jest ono narażone na błędy (możesz na przykład zapomnieć zainicjować jedną zmienną), ale głównie dlatego, że istnieje dużo lepszy sposób wykonania tego zadania: konstruktor.
Zadaniem konstruktora jest inicjalizacja obiektu podczas jego tworzenia. Konstruktor ma taką samą nazwę jak klasa i z punktu widzenia składni jest podobny do metody. Konstruktory nie mają jednak określonego typu zwracanego. Zwykle konstruktor nadaje wartości początkowe zmiennym składowym obiektu lub wykonuje inne czynności wymagane do nadania obiektowi ostatecznej postaci.
Niezależnie od tego, czy zdefiniujesz konstruktor, czy nie, wszystkie klasy w języku Java mają konstruktor. Java automatycznie dostarcza dla każdej klasy konstruktor domyślny inicjalizujący zmienne składowe domyślnymi wartościami zero, null i false odpowiednio dla typów numerycznych, referencji i typu boolean. Jeśli zdefiniujesz jednak własny konstruktor, konstruktor domyślny przestanie być używany.
Na listingu 4.10 przedstawiłem prosty przykład używający konstruktora.
Listing 4.10. ConsDemo.java
class MyClass {
int x;
MyClass() { Konstruktor klasy MyClass.
x = 10;
}
}
class ConsDemo {
public static void main(String args[]) {
MyClass t1 = new MyClass();
MyClass t2 = new MyClass();
System.out.println(t1.x + " " + t2.x);
}
}
W tym przypadku konstruktor klasy MyClass ma postać
x = 10;
}
Przypisuje on zmiennej składowej x klasy MyClass wartość 10. Konstruktor ten zostaje automatycznie wywołany, gdy tworzony jest obiekt klasy za pomocą instrukcji new. Na przykład wiersz kodu
powoduje wywołanie konstruktora MyClass() dla obiektu t1, który składowej t1.x nadaje wartość 10. To samo dotyczy obiektu t2. Po jego utworzeniu składowa t2.x ma wartość 10. Zatem wykonanie programu spowoduje wyświetlenie następującej informacji:
Konstruktory z parametrami
Konstruktor z poprzedniego przykładu nie miał żadnego parametru. W niektórych sytuacjach to wystarcza, ale najczęściej przydatne są konstruktory mające jeden lub więcej parametrów. Parametry dodajemy do konstruktora tak samo jak w przypadku metody: deklarujemy je wewnątrz nawiasów występujących po nazwie konstruktora. Na listingu 4.11 przedstawiłem przykład wykorzystujący
konstruktor klasy MyClass z jednym parametrem.
Listing 4.11. ParmConsDemo.java
class MyClass {
int x;
MyClass(int i) { Konstruktor ma parametr.
x = i;
}
}
class ParmConsDemo {
public static void main(String args[]) {
MyClass t1 = new MyClass(10);
MyClass t2 = new MyClass(88);
System.out.println(t1.x + " " + t2.x);
}
}
Wykonanie tego przykładu spowoduje wyświetlenie poniższych informacji:
W tej wersji programu konstruktor MyClass() definiuje jeden parametr o nazwie i, który służy do inicjalizacji zmiennej składowej x. Zatem wykonanie poniższego wiersza kodu
powoduje nadanie parametrowi i wartości 10, którą następnie konstruktor przypisuje zmiennej składowej x.
Java. Przewodnik dla początkujących. Wydanie VI, Autor: Herbert Schildt, Wydawnictwo: Helion