Javaのコンストラクタを勉強していると、this()という記述を見かけることがあると思います。
しかし、これらをどうやって使うのかが分からない方も多いのではないでしょうか。
- 「this()の使い方が知りたい」
- 「this()っていつ使うの?」
本記事ではこのようなお悩みを解決していきます!
ブログは1年程度継続しており、初心者向けに分かりやすい情報を発信しています!
▼あわせて読みたい記事
■this()とは
まずthis()ですが、これは自分の中にある他のコンストラクタを呼ぶ時に使う書き方です。
文字では分かりにくいので、実際に以下のサンプルを見てみましょう!
※なお、コンストラクタを知らない方は以下の記事で詳しく説明しているので、ぜひご覧ください。
this()のサンプル
それでは、サンプルで確認してみます。
class Book {
String title;
public Book() {
this("auto-title");
}
public Book(String title) {
this.title = title;
}
まず、上記のコードにはコンストラクタが2つあることを押さえます。
// 引数0個
public Book() {
this("auto-title");
}
// 引数1個
public Book(String title) {
this.title = title;
}
このうち、引数が0個の方にはthis("auto-title")とありますね。
this()とは、冒頭で述べた通り自分の中にある他のコンストラクタを呼び出すものでした。
つまり、this("auto-title")は、「文字列を1つ引数に取るコンストラクタ」を呼び出しているのです。
そのため、もし以下のコードを実行すると、titleに"auto-title"と入力されたBookインスタンスが生成されます。
Book b1 = new Book();
// ①Book()のコンストラクタが実行される
// ②this("auto-title"); が実行される
// ③Book(String title)が実行される(titleには"auto-title"が入っている)
このように、this()は自分が持つ他のコンストラクタを呼ぶことができるのです
this()の注意点
自クラスのほかのコンストラクタを呼べるthis()ですが、注意点が2つありますのでご紹介します。
意外と忘れがちなので、this()を使うときは気を付けてくださいね。
1. 引数の数に気を付けて呼び出すこと
まず1つめは、呼び出す際は引数の数に気を付けることです。
例えば、引数が0個と2個のコンストラクタがあるとします。
その時に以下のようなthis()の使い方をするとエラーになります。
class Book() {
String title;
int page;
public Book() {
this("auto-title"); // ×エラー。引数が1個のコンストラクタなんてないヨ
}
public Book(String title, int page) {
this.title = title;
this.page = page;
}
}
引数が0個か2個のコンストラクタしかない中で、this("auto-title")のように引数が1個のコンストラクタを呼ぶとエラーが起こります。
正しくはこうですね。
this("auto-title", 100);
このように、引数の数には気を付けましょう。
2. 先頭にしか書けないので注意
これは不思議なルールなのですが、this()はコンストラクタの中の1番上にしか書けません。
class Book {
String title;
public Book() {
System.out.println("yeah!!!");
this("auto-title"); // × 1番上じゃないのでエラー
}
public Book(String title) {
this.title = title;
}
}
忘れがちなので、気を付けてくださいね。
まとめ
this()の使い方と注意点をご紹介しました。
- this()は他のコンストラクタを呼ぶ
- this()はコンストラクタの一番上でしか使えない
- this()の引数の数には注意
以上のルールに気を付けてthis()を使ってみてください!
最後までお読みいただきありがとうございました。
▼あわせて読みたい記事