_クラス_のインスタンスを作るには、new演算子を使ってコンストラクターを呼び出します。コンストラクターは特別な種類のメソッドで、新しく作られたインスタンスを初期化することを目的としています。コンストラクターは通常のメソッドとよく似ていますが、戻り値の型がなく、名前がクラス名と同じです。
class Library {
private int books;
public Library() {
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
通常のメソッドと同じように、コンストラクターも仮引数を持つことができます。コンストラクターの仮引数は、あとから使えるように(privateな)フィールドとして保存するのが一般的で、そうでなければ一度きりの計算に使われます。引数は、通常のメソッドに渡すときと同じように、コンストラクターにも渡すことができます。
class Building {
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight) {
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)
コンストラクターは必ずしも書く必要はありません。コンストラクターを書かなければ、コンパイラーが仮引数のないコンストラクターを生成します。
class Elevator {
}
// This will call the (empty) generated constructor
var elevator = new Elevator();
フィールドに初期値が代入されている場合、コンパイラーは、その代入を実際にはコンストラクターの中で行うコードを出力します。したがって、次のクラス宣言は(機能的には)同じ意味になります。
class UsingFieldInitialization {
private int players = 5;
}
class UsingConstructorInitialization {
private int players;
public UsingConstructorInitialization() {
players = 5;
}
}