🦁

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のクラス設計では、可読性と安全性のためによく使われる

必要であれば、
thisstatic の違い」
this が使えないケース」
など、さらに踏み込んだ記事にもできます。

Discussion