2018年05月15日
thisって何ものなのか
プログラミング初心者やthisの無い言語を触ってきた人なら尚更だと思うので
javaでは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);
}
}
こんなクラスとメソッドがあったとします
この時の出力結果は…
です。
showメソッドの引数、パラメータのString型のstrと
フィールド変数のstr名前がかぶっていますがthisをつけることで
名前がかぶっていたとしてもフィールド変数への参照となり区別することができます
ちなみにさっきのコードでthisをつけないとパラメータ変数の情報だけ出力されます
これは、同じ名前のフィールド変数とローカル変数があった場合
javaでは「フィールド変数が隠される」ためです
さらに言うとクラス内の変数はjavaの場合
フィールド変数よりもローカル変数やパラメータが優先されます
thisはそれらをガン無視して、フィールド変数を参照してくれます
ちなみに、メソッドにstaticが付いている場合は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を使ってコンストラクタ内から別のコンストラクタを呼ぶことができます