Memos About Salesforce

Salesforceにハマってたこと!

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を使ってコンストラクタ内から別のコンストラクタを呼ぶことができます