🦁
Javaにおける `this` キーワードとは何か
Javaのクラス設計において、this は非常に重要なキーワードの一つです。
本記事では、以下のコードを例にして、thisが何なのか、そしてどのような使い方ができるのかについて説明します。
public class Sample {
private int num;
public Sample(int num) {
this.num = num;
}
}
this とは何か
this とは、「現在のオブジェクト自身」を指す参照です。
クラスから生成されたインスタンスそのものを表します。
つまり、
-
this.num→ 「このオブジェクトが持っているnumフィールド」 -
num→ メソッドやコンストラクタの引数、またはローカル変数
を意味します。
なぜ this が必要なのか
上記のコードでは、フィールド名とコンストラクタの引数名が同じ num になっています。
private int num;
public Sample(int num) {
this.num = num;
}
この場合、
-
num(右辺) → コンストラクタの引数 -
this.num(左辺) → クラスのフィールド
を明確に区別する必要があります。
this を使わない場合
もし this を使わずに次のように書くと、
public Sample(int num) {
num = num;
}
これは
「引数の
numに、引数のnumを代入する」
という意味になり、フィールド num には何も代入されません。
その結果、フィールド num は初期値の 0 のままとなります。
this.num = num; の正確な意味
this.num = num;
この1行は、次の意味を持ちます。
「このオブジェクト自身が持つ
numフィールドに、
コンストラクタで受け取った引数numの値を代入する」
つまり、オブジェクト生成時に状態を正しく初期化するための処理です。
this が使われる主な場面
this は、今回の例以外にも以下のような場面で使われます。
① フィールドとローカル変数を区別する
this.value = value;
最も一般的な使い方です。
② 自分自身のメソッドを呼び出す
this.calculate();
※ 通常は calculate(); と省略できますが、明示したい場合に使われます。
③ 別のコンストラクタを呼び出す
public Sample() {
this(10); // 引数付きコンストラクタを呼び出す
}
まとめ
-
thisは **「現在のオブジェクト自身」**を指すキーワード - フィールドと引数・ローカル変数を区別するために使われる
-
this.num = num;は
「オブジェクトのnumフィールドに引数の値を代入する」ことを意味する - Javaのクラス設計では、可読性と安全性のためによく使われる
必要であれば、
「this と static の違い」
「this が使えないケース」
など、さらに踏み込んだ記事にもできます。
Discussion