【初心者向け】Javaの「this」の3つの意味をやさしく解説!

こんにちは。ゆうせいです。

今回は、Javaを学びはじめた新人エンジニアの方に向けて、「this」というキーワードについて詳しくお話しします。

「this」って、最初は「なんだか分かりづらい…」と感じる方が多いんです。でも、意味がわかると一気にコードが読みやすくなりますよ!

では、さっそく本題に入りましょう!


Javaにおける「this」の3つの役割とは?

Javaのthisには、大きくわけて3つの使い方があります。

番号使い方説明のキーワード
1フィールドと引数の区別「自分自身の変数ですよ」
2自分自身のインスタンスを渡す「自分自身を引数として渡す」
3コンストラクタの呼び出し(this())「他のコンストラクタを呼ぶ」

一つずつ、かみ砕いて見ていきましょう。


1. フィールドと引数を区別するための this

どういうこと?

同じ名前の変数がフィールド(クラスの変数)とメソッドの引数の中にあるとき、Javaはどっちを指しているのか迷ってしまいます。

そのときに「this」をつけることで、「これはクラスのフィールドのことですよ!」と教えてあげることができます。

例で見てみましょう!

public class Dog {
    private String name;

    public Dog(String name) {
        this.name = name;
    }
}

このコードでは、コンストラクタの引数nameとフィールドのnameが同じ名前です。
this.name = name; と書くことで、

  • 左側のthis.name → クラスのフィールド
  • 右側のname → メソッドの引数

というように、明確に区別しています。

イメージで理解!

あなたが「私」という名前の社員だったとして、新人にも「私」という名前の人がいたら混乱しますよね。
そのときに「この私(this)」って言えば、「あ、自分のことね」と分かります。


2. 自分自身を引数として他のメソッドに渡す this

どういうときに使うの?

あるオブジェクト自身を別のオブジェクトやメソッドに渡したいときに使います。

たとえば、あるクラスのインスタンスを他のクラスに知らせたいとき。

例で見てみましょう!

public class Printer {
    public void print(Dog dog) {
        System.out.println("犬の名前: " + dog.getName());
    }
}

public class Dog {
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void show(Printer printer) {
        printer.print(this);
    }
}

このthisは、「このインスタンス(自分自身)を渡して!」という意味になります。

例えでいうと?

友達に「俺のこと、紹介してよ」と頼むイメージです。そのときに「俺(this)」を渡しているんですね。


3. 他のコンストラクタを呼び出す this()

これは特殊な使い方!

コンストラクタの中から同じクラスの別のコンストラクタを呼びたいときに、this()という形で使います。

注意点は1つだけ。必ず1行目に書く必要がある!

例を見てみましょう!

public class Cat {
    private String name;
    private int age;

    public Cat(String name) {
        this(name, 0); // 別のコンストラクタを呼び出している
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

ここでは、名前だけを指定されたときに、年齢を0として処理しています。
処理の共通部分をまとめることができて、コードの重複を防げるんですね。

例えでいうと?

「Aさんに頼んだら、AさんがBさんに頼んでくれた」みたいな感じです。
要するに「ちょっと自分の中で別の準備をしてから、また動くよ!」という流れです。


おさらいと今後の学習の指針

最後に、ここまでの内容を表でまとめましょう!

使い方の種類目的書き方
フィールドと引数の区別同名の変数を区別するthis.変数名
自分自身を渡すメソッドや別クラスに自分を渡すthis
他のコンストラクタを呼び出す処理の共通化・重複防止this(引数...)

次に学ぶべきこと

thisの使い方を理解できたら、次は「staticと非staticの違い」や「継承(extends)」にチャレンジしてみましょう。

また、「this」の裏側にある「インスタンスとオブジェクトの関係」を深掘りしてみると、よりJavaの世界がクリアに見えてきますよ!

それでは、また次回もがんばっていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。