Javaのthisキーワードのまとめ

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

Javaでプログラムを書いていると、thisというキーワードに出会います。このthisはクラスの中で使われる特別なキーワードで、Javaのオブジェクト指向の仕組みを理解する上でとても重要な役割を持っています。

今回は、「this」とは何なのか、どのような場合に使われるのかについて詳しく解説しますね。


1. thisとは?

thisは、現在のインスタンス(オブジェクト)自身を指すキーワードです。クラスの中で自分自身を参照したいときに使います。これは、メソッドやコンストラクタの中でそのオブジェクト自体を指し示す際に便利です。

Javaではクラスを使ってオブジェクトを作成しますが、そのオブジェクトがメソッドの中で自分自身を指し示す場合にthisを使用することで、そのオブジェクトの属性やメソッドにアクセスできます。

例:簡単なクラスでのthisの使い方

以下の例で見てみましょう。

public class Person {
    String name;

    public Person(String name) {
        this.name = name; // thisを使って自分のフィールドにアクセス
    }

    public void printName() {
        System.out.println(this.name); // thisで自分のフィールドにアクセス
    }
}

この例のPersonクラスにはnameというフィールド(クラスのメンバー変数)があり、コンストラクタとprintNameメソッドがあります。thisを使うことで、現在のインスタンス(Personオブジェクト)のnameフィールドにアクセスしています。


2. thisの主な使い方

thisは主に以下の3つのケースでよく使われます。

2.1 フィールドとパラメータの区別

よくある使い方として、コンストラクタやメソッドのパラメータがフィールド名と同じ時に区別するために使用します。このときthisを使ってフィールドを指すことで、引数の値をフィールドに割り当てられます。

以下の例で考えてみましょう。

public class Car {
    String model;

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

コンストラクタの引数もmodel、フィールドもmodelなので、this.modelとすることで、クラスのフィールドを指していることが明確になります。

2.2 メソッドチェーンでの利用

thisを使って同じオブジェクトのメソッドを連続して呼び出す、いわゆる「メソッドチェーン」を実現することができます。メソッドチェーンは、thisを使ってメソッドの戻り値に自分自身のインスタンスを返すことで、連続したメソッド呼び出しを可能にします。

public class Book {
    String title;

    public Book setTitle(String title) {
        this.title = title;
        return this; // 自分自身のインスタンスを返す
    }

    public Book printTitle() {
        System.out.println(this.title);
        return this;
    }
}

このようにして、次のようにメソッドチェーンを実現できます。

public class Main {
    public static void main(String[] args) {
        Book myBook = new Book();
        myBook.setTitle("Java入門").printTitle(); // メソッドチェーンで呼び出し
    }
}

2.3 コンストラクタから別のコンストラクタを呼び出す

thisを使って、別のコンストラクタを呼び出すこともできます。これを「コンストラクタの委譲」と言います。例えば、引数の数が異なるコンストラクタを呼び出して、共通の初期化処理をまとめることができます。

public class Student {
    String name;
    int age;

    public Student() {
        this("No name", 18); // 引数を持つコンストラクタを呼び出し
    }

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

この例では、引数なしのコンストラクタが、引数ありのコンストラクタをthisを使って呼び出しています。これにより、Studentオブジェクトを引数なしで作成した場合もnameageの初期値が設定されます。


3. thisを使うメリット

thisを使うことで、コードが以下のように明確で読みやすくなります。

  • フィールドと引数を区別できる:同じ名前の引数やフィールドがある場合も混乱を避けられる
  • メソッドチェーンが可能になる:連続したメソッド呼び出しができ、コードが簡潔に書ける
  • コンストラクタの委譲が可能になる:共通の初期化処理をまとめられるため、コードの重複を避けられる

4. thisの使いどころに注意!

thisは便利ですが、不要な場面で使うとコードが冗長になりがちです。フィールドやメソッドにアクセスする際、特に混乱がない場合にはthisは省略するのが一般的です。thisは明示的に自分自身を参照する必要がある場合や、可読性を向上させるためにのみ使うと良いでしょう。


まとめ

  • thisは現在のインスタンスを指す:そのオブジェクト自身を参照できる
  • フィールドと引数を区別するために使う:特に名前が同じ場合に役立つ
  • メソッドチェーンやコンストラクタの委譲にも利用:より柔軟なコードが書ける

thisをうまく活用できるようになると、オブジェクト指向の理解がさらに深まります。使い方を意識しながらコードを書くことで、Javaのプログラムがさらに読みやすくなるでしょう!

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

投稿者プロフィール

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