カテゴリ: Javaのカプセル化 更新日: 2026/03/24

Javaのthisキーワードの使い方を徹底解説!フィールドと引数の区別を初心者向けに解説

144
Java の this キーワードを使ってフィールドと引数を区別する

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaでクラスの中にあるフィールドと引数の名前が同じときに、どうやって区別するんですか?」

先生

「良い質問ですね!Javaではthisというキーワードを使って、フィールドと引数を区別することができます。」

生徒

thisキーワードってどんな役割があるんですか?」

先生

「それでは、thisキーワードの基本的な役割や使い方について、詳しく見ていきましょう!」

1. thisキーワードとは?

1. thisキーワードとは?
1. thisキーワードとは?

Javaのthisキーワードを一言でいうと、「今動いている自分自身のオブジェクト(インスタンス)」を指し示すための特別な目印です。

プログラミング未経験の方には少し難しく聞こえるかもしれませんが、クラスという「設計図」から作られた、実体としての「自分自身」を指す名前だと考えると分かりやすくなります。主に、クラスの中に定義された変数(フィールド)やメソッドにアクセスする際に、「これは他の誰のものでもなく、私自身のデータですよ」と明示するために使われます。

例えば、「スマホ」というクラスがある場合、this.colorと書けば、その時手に持っている特定のスマホの「色」を指すことになります。Javaにおける具体的な記述ルールは以下の通りです。

  • 自分自身の参照: クラス内のメソッドから、そのクラスのフィールドに確実にアクセスできる。
  • 名前の衝突を回避: メソッドの引数(外から入ってくる値)と、フィールド(クラスが持っている値)の名前が同じでも、thisをつければフィールドの方を指せます。

もっともシンプルなイメージをコードで確認してみましょう。


public class MyColor {
    String color = "青"; // フィールド(クラスの持ち物)

    public void showColor() {
        // this.color と書くことで「このクラスのcolor」だと明示できる
        System.out.println("このオブジェクトの色は: " + this.color);
    }

    public static void main(String[] args) {
        MyColor myObj = new MyColor();
        myObj.showColor();
    }
}

このオブジェクトの色は: 青

このように、thisを使うことで、プログラムに対して「今操作している、まさにこの実体(オブジェクト)のデータを使ってください」と正確に伝えることができるのです。

2. どうして区別が必要なの?

2. どうして区別が必要なの?
2. どうして区別が必要なの?

Javaのクラスでは、フィールドと引数の名前が同じ場合に区別がつかなくなります。例えば、次のようなコンストラクタの例を考えてみましょう。


public class Student {
    String name;

    public Student(String name) {
        name = name; // どちらも引数の name を指している
    }
}

このコードでは、コンストラクタのname引数が、同じ名前のフィールドnameを上書きしていないため、フィールドに値が代入されません。これを解決するために、thisキーワードを使います。

3. thisキーワードを使った例

3. thisキーワードを使った例
3. thisキーワードを使った例

thisを使うと、クラスのフィールドを明示的に指定できます。次のように書き換えることで、引数のnameの値をフィールドのnameに正しく代入できます。


public class Student {
    String name;

    public Student(String name) {
        this.name = name; // this.nameはフィールド、nameは引数
    }
}

このようにthisを使うことで、フィールドと引数の名前が同じでも、正しく区別できるようになります。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. thisキーワードのもう一つの使い方:メソッド呼び出し

4. thisキーワードのもう一つの使い方:メソッド呼び出し
4. thisキーワードのもう一つの使い方:メソッド呼び出し

実は、thisはメソッドを呼び出すときにも使えます。例えば、クラス内で同じクラスのメソッドを呼ぶときに、thisを使うことで現在のオブジェクトに属するメソッドだと明示できます。


public class Student {
    String name;

    public Student(String name) {
        this.name = name;
        this.printName(); // thisを使ってメソッドを呼び出す
    }

    public void printName() {
        System.out.println("名前は: " + this.name);
    }
}

もちろん、同じクラス内のメソッドならthisを省略しても呼び出せますが、明示的にthisをつけると可読性が上がり、他の開発者にも分かりやすくなります。

5. 実行例を確認しよう

5. 実行例を確認しよう
5. 実行例を確認しよう

実際にthisを使ったStudentクラスを実行してみましょう。


public class StudentExample {
    public static void main(String[] args) {
        Student student = new Student("太郎");
    }
}

class Student {
    String name;

    public Student(String name) {
        this.name = name;
        this.printName();
    }

    public void printName() {
        System.out.println("生徒の名前: " + this.name);
    }
}

このプログラムを実行すると、次のような結果が表示されます。


生徒の名前: 太郎

6. thisキーワードはコンストラクタの呼び出しにも使える

6. thisキーワードはコンストラクタの呼び出しにも使える
6. thisキーワードはコンストラクタの呼び出しにも使える

thisは、同じクラス内の別のコンストラクタを呼び出すときにも使えます。例えば、引数が異なる複数のコンストラクタがある場合に、this()を使ってコードの重複を減らせます。


public class Student {
    String name;
    int age;

    public Student(String name) {
        this(name, 18); // 18をデフォルトの年齢として渡す
    }

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

    public void printInfo() {
        System.out.println("名前: " + this.name + ", 年齢: " + this.age);
    }
}

このようにthis()を使うことで、コンストラクタの重複部分をまとめて管理できます。

7. thisキーワードのポイント

7. thisキーワードのポイント
7. thisキーワードのポイント

Javaのthisキーワードは、主に次の3つの場面で活躍します。

  • 同じ名前のフィールドと引数を区別するとき
  • 自分自身のメソッドやフィールドを明示的に参照するとき
  • 別のコンストラクタを呼び出すとき

初心者のうちは、フィールドと引数の名前を同じにする場面で特に重要になります。プログラムが思ったように動かないときは、thisを正しく使えているか確認してみましょう。

まとめ

まとめ
まとめ

thisキーワードを理解するとJavaの基礎が一段深まる

今回の記事では、Javaにおけるthisキーワードの使い方について、初心者の方にも分かりやすい形で解説してきました。thisは現在のオブジェクト自身を指す特別なキーワードであり、クラス設計やオブジェクト指向プログラミングを理解するうえで欠かせない存在です。特に、フィールドとメソッド引数の名前が同じ場合に、どちらを操作しているのかを明確にする役割は非常に重要です。

Javaでは、クラスのフィールドとコンストラクタやメソッドの引数に同じ名前を付けることがよくあります。これはコードの意味を分かりやすくするためですが、そのままでは引数とフィールドの区別がつかなくなってしまいます。そこでthisキーワードを使うことで、「このオブジェクトが持っているフィールド」であることを明示でき、意図した通りに値を代入したり参照したりできるようになります。

コンストラクタとthisの関係を正しく理解しよう

thisキーワードは、単にフィールドと引数を区別するだけでなく、コンストラクタの中で非常に重要な役割を果たします。コンストラクタ内でthisを使うことで、オブジェクト生成時の初期化処理を分かりやすく整理できます。また、this()という形で別のコンストラクタを呼び出すことにより、処理の重複を避け、保守性の高いコードを書くことが可能になります。

Javaの学習を進めていくと、フィールドの初期化、メソッドの呼び出し、コンストラクタの設計といった場面でthisが頻繁に登場します。そのたびに「thisは何を指しているのか」「なぜここでthisが必要なのか」を意識することで、コードの読み書きが一気に楽になります。

まとめとしてのサンプルプログラム

ここで、thisキーワードの基本的な使い方を復習できるシンプルなサンプルプログラムをもう一度確認してみましょう。フィールドと引数の区別、そしてメソッド呼び出しの流れを意識しながら読むことが大切です。


public class Book {
    String title;
    int price;

    public Book(String title, int price) {
        this.title = title;
        this.price = price;
        this.printInfo();
    }

    public void printInfo() {
        System.out.println("書籍名: " + this.title + " 価格: " + this.price);
    }
}

このプログラムでは、コンストラクタの引数とフィールドの名前が同じですが、thisを使うことで正しくフィールドに値を代入しています。また、this.printInfoと書くことで、現在のオブジェクトが持つメソッドを呼び出していることが明確になります。このような書き方は、Javaのコードを読み慣れていない人にとっても理解しやすく、実務でもよく使われる書き方です。

thisキーワードを正しく使えるようになると、Javaのクラス設計に自信が持てるようになります。フィールドと引数の混乱が減り、バグの原因を見つけやすくなる点も大きなメリットです。Java初心者の方は、まずthisを自然に使いこなせるようになることを目標にすると良いでしょう。

先生と生徒の振り返り会話

生徒

「thisキーワードって、最初は難しそうに見えましたが、フィールドと引数を区別するためのものだと分かってスッキリしました。」

先生

「それは良い理解ですね。Javaではthisを正しく使えるかどうかで、コードの読みやすさが大きく変わります。」

生徒

「コンストラクタの中でthisを使う理由も、オブジェクト自身を初期化しているんだと考えると分かりやすかったです。」

先生

「その通りです。thisは今まさに作られているオブジェクトを指しています。」

生徒

「これからは、フィールドと同じ名前の引数を使うときは、必ずthisを意識して書いてみます。」

先生

「それができれば、Javaの基礎はかなり身についています。次はクラス設計全体を意識して学んでいきましょう。」

Javaのカプセル化の一覧へ
新着記事
AWS
【AWS】CLIでクエリ(--query)の使い方を徹底解説【JQとの違いも】
【AWS CLI】--queryオプションの使い方を徹底解説!JMESPathとJQとの違いも初心者向けにわかりやすく解説
Java
Java の継承のメリットとは?コードの再利用をしやすくする
Java の継承のメリットとは?コードの再利用をしやすくする方法を初心者向けに解説
Java
Java の継承を使うべき場面と使わないほうがよい場面
Java の継承を使うべき場面と使わないほうがよい場面を初心者向けに解説!
Java
Java の toString() メソッドをオーバーライドしてオブジェクトの情報を表示
Java の toString() メソッドをオーバーライドしてオブジェクトの情報を表示
人気記事
AWS
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
AWS
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
AWS
インスタンスタイプの料金比較と最適な選び方(最新2026年版)
AWSインスタンスタイプの料金比較と最適な選び方!初心者でもわかる2025年最新ガイド
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク