コンストラクタ
この節の要点
- クラスから
newを使ってオブジェクトを作成する時、コンストラクタとよばれる特殊なメソッドが呼び出される。- コンストラクタはオブジェクト内のフィールドの初期化などを目的としたメソッドである。
thisキーワードは、インスタンスメソッド内で、呼び出したオブジェクトそれぞれのフィールドやメソッドを指し示す際に使う。
クラスからオブジェクトを生成するにあたって、オブジェクト内のデータを初期化することを目的として用意されている特殊なメソッドをクラスに定義できます。このメソッドをコンストラクタと呼びます。
図13にコンストラクタを定義したクラス例を示します。 返り値の型が無いクラスと同じ名前のメソッドがコンストラクタです。
public class Hello {
/**
* Helloクラスのコンストラクタ
*/
public Hello() {
System.out.println("こんにちは");
}
}
public static void main(String[] args) {
System.out.println("オブジェクトの作成前");
Hello echo = new Hello();
System.out.println("オブジェクトの作成後");
}
図13に示すプログラムのコンストラクタを取り出すと、図15になります。
public Hello() {
System.out.println("こんにちは");
}

コンストラクタは、図16に示す通り、new演算子を使ってクラスからオブジェクトを生成した直後に実行されます。つまり、図15における5行目の命令実行のタイミングでコンストラクタが実行されます。
この図13、図14のプログラムを実行すると、出力タブに図17のテキストが表示されます。
オブジェクトの作成前
こんにちは
オブジェクトの作成語
また、コンストラクタは図18の例のように、引数付きで定義することもできます。
public class User {
private String familyName;
private String firstName;
public User(String familyName, String firstName) {
this.familyName = familyName;
this.firstName = firstName;
}
public String getUserName() {
return this.familyName + " " + this.firstName;
}
}
public static void main(String[] args) {
User u = new User("Tanaka", "Taro");
System.out.println(u.getUserName());
}
図18のUserクラスは、ユーザデータを表す概念です。この場合、図19の3行目のようにオブジェクト生成をする際に引数を渡す必要があります。
public User(String familyName, String firstName) {
this.familyName = familyName;
this.firstName = firstName;
}
ここで、図17のコンストラクタ定義を見ると、this キーワードを使っています。thisキーワードは、クラスのメソッド内で使うことができる特殊なキーワードです。
このthisキーワードは、個々にnewで作成したオブジェクトそのものを示します。従って、図20のようにオブジェクトが持つメソッドやフィールドをthisキーワードにピリオドを介して呼び出すことができます。

ここで、thisキーワードを省略した場合も同様にオブジェクトが持つメソッドやフィールドを呼び出すことになります。しかし、メソッド引数名とフィールド名が重複していた場合、メソッド引数の呼び出しが優先されるため、同名のフィールドを呼び出す場合はthisキーワードを介して呼び出す必要があります。