Edited at

[Java] thisってなに指してんの

More than 3 years have passed since last update.


thisって何ものなのか

多分、誰もが一度は思ったことがあるであろう「this」というキーワード

プログラミング初心者やthisの無い言語を触ってきた人なら尚更だと思うので

javaではthisがどのようなものかさくっと解説します


this参照

普段、javaのコードを書く上で使うのがthis参照と言われるものです

オブジェクト指向を勉強した人であればカプセル化なんかで使うことが多いかと思います。

カプセル化なんかで使うことがあるので気がつくかもしれませんが

thisは…

そのクラスのオブジェクトを参照する参照型オブジェクト

なんです。

例えば


sample.java


public class sample{

private String str = "Hello";

public static void main(String... args){
sample s = new sample();
s.show(",world");
}

public void show(String str){
System.out.println(this.str + str);
}
}


こんなクラスとメソッドがあったとします

この時の出力結果は…

Hello,World

です。

showメソッドの引数、パラメータのString型のstrと

フィールド変数のstr名前がかぶっていますがthisをつけることで

名前がかぶっていたとしてもフィールド変数への参照となり区別することができます

ちなみにさっきのコードでthisをつけないとパラメータ変数の情報だけ出力されます

,world,world

これは、同じ名前のフィールド変数とローカル変数があった場合

javaでは「フィールド変数が隠される」ためです

さらに言うとクラス内の変数はjavaの場合

フィールド変数よりもローカル変数やパラメータが優先されます

thisはそれらをガン無視して、フィールド変数を参照してくれます

ちなみに、メソッドにstaticが付いている場合はthisを使った参照は行えません


thisでこんな使い方も

以下のようなクラスがあったとします


sample2.java


class sample2{
private String str,str2,str3;

//コンストラクタその1
sample2(String s1,String s2){
this(s1,s2,"!");
}

//コンストラクタその2
sample2(String s1,String s2,String s3){
this.str = s1;
this.str2 = s2;
this.str3 = s3;
}
}


こんな使い方もできます

ざっくり言えば、this呼び出しってやつです

実はthisを使ってコンストラクタ内から別のコンストラクタを呼ぶことができます