Konstruktoren dienen zum Anlegen von Objekten der Klasse mit den new-Operator. Sie legen den für das Objekt benötigten Speicherplatz an und initialisieren das Objekt, d.h. sie setzen es in einen gültigen Anfangszustand.
Laut Tov Are Jacobsen erfüllt der Konstruktor die Funktion eines Baumeisters, der ein Objekt mit den im Plan festgelegten Eigenschaften errichtet:
When you write a class you describe the behaviour of potential objects. Much like designing a house on paper: you can't live in it unless you construct it first.
And to do that you say "I want a new house, so I'll call the constructor":
House myNewHome;
myNewHome = new House();(Tov Are Jacobsen, comp.lang.java.help, 1998)
Im einfachsten Fall enthält die Definition der Klasse keine explizite Definition von Konstruktoren. Dann wird vom Java-Compiler ein Default-Konstruktor mit leerer Parameterliste erzeugt, der in der Form
ClassName object = new ClassName();
aufgerufen werden kann und nur den Speicherplatz anlegt und alle Datenfelder auf ihre Anfangswerte setzt.
Wenn man will, daß im Konstruktor weitere Aktionen erfolgen sollen (z.B. durch Aufruf von Methoden), so muß man den Konstruktor selbst definieren. Dies erfolgt in der Form
public ClassName() {
Statements;
}
Man kann auch einen oder mehrere Konstruktoren mit verschiedenen Parameterlisten definieren (Overloading). In diesem Fall wird vom Compiler kein Default-Konstruktor automatisch erzeugt: Entweder man definiert gar keinen Konstruktor oder man definiert alle explizit. Beispiel:
public class BookShelf {
public Book[] book;
public BookShelf (int maxBooks) {
book = new Book[maxBooks];
for (int i=0; i<book.length; i++)
book[i]=null;
}
// methods for adding and removing books ...
}
In diesem Fall muß man im Konstruktor die Maximalanzahl angeben, es gibt keinen Default-Konstruktor ohne Parameter. Beispiele:
BookShelf smallShelf = new BookShelf(20); BookShelf bigShelf = new BookShelf(60);
Wenn man auch einen Default-Konstruktor haben will, was in den meisten Fällen sinnvoll ist, dann muß man ihn explizit zusätzlich angeben.
Dabei kann ein Konstruktor auch einen anderen Konstruktor mit einer entsprechenden Parameterliste aufrufen, indem man das Wort this für den Aufruf des Konstruktors angibt. Beispiel:
public class BookShelf {
public Book[] book;
public BookShelf() {
this(20);
}
public BookShelf (int maxBooks) {
book = new Book[maxBooks];
for (int i=0; i<book.length; i++)
book[i]=null;
}
// methods for adding and removing books ...
}
In diesem Fall kann man mit
BookShelf smallShelf = new BookShelf();
ein Regal mit der Standardgröße für maximal 20 Bücher anlegen und mit
BookShelf bigShelf = new BookShelf(60);
ein größeres Regal für maximal 60 Bücher.