【Java入門】thisとは? 意味や使い方のキホンを解説します!

Javaのthisを使用することで変数名が重複しても区別することができます。「メンバ変数とローカル変数の変数名を同じにして使用したい」と思ったことはありませんか?

thisを使えば変数名が同じでも区別して使用することができます。今回は、そんなthisについて、使い方の基礎から応用までわかりやすく解説していきます!

  • 【基礎】thisとは
  • 【基礎】thisの使い方
  • 【発展】thisでstatic変数にアクセスするときの注意点
  • 【発展】tsuperで親クラス(スーパークラス)の変数やメソッドを参照する方法

今回はこれらの方法を覚えるために、thisとは何か?意味や使い方を詳しく見ていきましょう!

thisとは

初めにthisの意味と使い方を解説します。thisは同じ変数名やメソッド名があるときに、それらを区別するために使用します。

例えば、メンバ変数名とローカル変数名が同じ場合にはローカル変数が優先して参照されます。このときにメンバ変数を指定する場合にはthisをつけて対応します。

thisの使い方

メンバ変数とローカル変数

ここでは、変数名が同じメンバ変数とローカル変数を区別する方法を解説します。同じ変数名にthisを付けると、実行結果がどう変わるのかを次のプログラムを確認してみましょう。

class ThisSampleClass {
    private String str = "engineer";

    public void print(String str) {
        System.out.println("str = " + str);
        System.out.println("this.str = " + this.str);
    }
}

public class Main {
    public static void main(String[] args) {
        String str = "samurai";
        ThisSampleClass sc = new ThisSampleClass();
        sc.print(str);
    }
}
[実行結果]
str = samurai
this.str = engineer

ここではthisを使ってメソッドの引数になっているローカル変数と、メンバ変数を区別して表示しています。これでthisを使ってローカル変数とメンバ変数を区別することができました!

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

次にthisを使ってコンストラクタから、別のコンストラクタを呼び出す方法を解説します。次のプログラムで確認してみましょう。

class ThisSampleClass {
    private String str1;
    private String str2;

    ThisSampleClass(String str) {
        this("samurai", str);
    }

    ThisSampleClass(String str1, String str2) {
        this.str1 = str1;
        this.str2 = str2;
    }

    public void print() {
        System.out.println(str1);
        System.out.println(str2);
    }
}

public class Main {
    public static void main(String[] args) {
        String str = "engineer";
        ThisSampleClass sc = new ThisSampleClass(str);
        sc.print();
    }
}
[実行結果]
samurai
engineer

このプログラムでは引数が1つのコンストラクタから、thisを使って引数が2つのコンストラクタを呼び出しています。thisを使って別のコンストラクタを呼び出せることが確認できました!

コンストラクタの詳しい使い方はこちらの記事で詳しくしているのでぜひ確認してみてください!

【Java入門】コンストラクタの使い方総まとめ(クラス/インスタンス)
更新日 : 2019年4月8日

static変数にアクセスするときの注意点

次にstatic変数にアクセスするときの注意点を解説します。static変数にアクセスするときは、”this.変数名”ではなく”クラス名.変数名”でアクセスしてください。

static変数にアクセスするときにthisを使うと、開発環境(Eclipseなど)から「static フィールド SampleClass.str には static にアクセスする必要があります」という警告が出ます。

動作に問題はありませんが、thisを使うとstatic変数を誤って変更してしまうなどのバグの原因になりやすいので注意してください。次のプログラムで確認してみましょう。

class ThisSampleClass {
	static String str;

	public void print(String str) {
		this.str = str; // this.変数名だと警告が出る
		ThisSampleClass.str = str; // クラス名.変数名ならOK
		System.out.println(ThisSampleClass.str);
	}
}

public class Main {
	public static void main(String[] args) {
		String str = "samurai";
		ThisSampleClass sc = new ThisSampleClass();
		sc.print(str);
	}
}
[実行結果]
samurai

static変数にアクセスするときにthisを使うと警告が出ますが、”クラス名.変数名”なら警告が出ないことが確認できました!

superで親クラスの変数やメソッドを参照する

最後に、クラスを継承したときに使う”super”と”this”の使い方を解説します。クラスの継承は、クラス名の後に”extends”と”継承するクラス名”を書きます。

サブクラスはスーパークラスのメンバ変数やメソッドを継承しています。サブクラスにスーパークラスと同じ名前の変数やメソッドがある場合には、”super”と”this”を利用して区別します。このときの”this”は省略することもできます。

次のプログラムで確認してみましょう。

class SuperClassSample {
	String str = "SuperClass";

	public String getSrt() {
		return str;
	}
}

class SubClassSample extends SuperClassSample {
	String str = "SubClass";

	public String getSrt() {
		return str;
	}

	public void print() {
		System.out.println("super.str = " + super.str);
		System.out.println("this.str = " + this.str);
		System.out.println("str = " + str);

		System.out.println("super.getSrt() = " + super.getSrt());
		System.out.println("this.getSrt() = " + this.getSrt());
		System.out.println("getSrt() = " + getSrt());
	}
}

public class Main {
	public static void main(String[] args) {
		SubClassSample scs = new SubClassSample();
		scs.print();
	}
}
[実行結果]
super.str = SuperClass
this.str = SubClass
str = SubClass
super.getSrt() = SuperClass
this.getSrt() = SubClass
getSrt() = SubClass

”super”と”this”を使って、スーパークラスとサブクラスのメンバ変数やメンバメソッドを区別して使うことができました!superの詳しい使い方はこちらの記事で詳しくしているのでぜひ確認してみてください!

【Java】superとは?意味や使い方について詳しく解説
更新日 : 2019年10月16日

まとめ

いかがでしたか?今回はthisの意味と使い方について解説しました。同じ名前の変数がある場合はthisを使うのを忘れないように注意してくださいね。もしthisの使い方を忘れてしまったらこの記事を確認してください!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]