JAVAにおけるthisの使い方のまとめ
6943 ワード
回転:http://blog.sina.com.cn/s/blog_6 a 6 b 6 badc 90100 t 8 hm.玣SinaEditorTemp_FontName
Javaのキーワードthisは方法の体内にしか使えません.オブジェクトが作成されると、Java仮想マシン(JVM)はこのオブジェクトに自身を参照するポインタを割り当てます.このポインタの名前はthisです.したがって、thisはクラス内の非静的な方法でしか使用できません.静的な方法と静的なコードブロックの中では絶対にthisが発生してはいけません.これは「Javaキーワードstatic、final使用総括」の文で明確に説明されています.また、thisは特定の対象だけと関連していますが、類とは関連していません.同じ種類の異なる対象は異なるthisがあります.
Int constructor i——this.i: 10——11
String constructor: OK
String constructor: ok again
Int constructor: 21
String constructor: ok again
14
================================================================================================================
細かい問題の注釈はもうはっきり書いてあります.ここでは詳しく説明しないで、ただまとめてみます.実はthisは主に3つの使い方が必要です.
1、現在のオブジェクトに対する参照を表します。
2、関数パラメータではなくクラスのメンバー変数を表します.関数パラメータとメンバー変数の同名の名前は区別されます.実はこれは第一の用法の特例で、よく使われていますので、それを強調します.
3、構造方法で指定されたパラメータタイプを満たすコンストラクタを参照するために使用されます。しかし、ここで注意しなければならないのは、構造的な方法を参照するだけであり、開始位置にある必要があります。
それから注意します.thisはstaticの方法では使えません.だから、staticの方法の定義をあげる人もいます.thisがない方法です.誇張していますが、thisはstaticの方法では使えないと十分に説明しています.
どのような状況でthisを使う必要があるかを説明します. 第一に、thisによって別の構造方法を呼び出して、髪でthis(パラメータリスト)を送ります.これは類の構造方法の中だけで、他のところでは使えません. 第二に、関数パラメータまたは関数内の局所変数とメンバー変数が同名の場合、メンバー変数はブロックされています.この場合、メンバー変数にアクセスするには、「this.メンバー変数名」という方法でメンバー変数を参照する必要があります.もちろん、同名がない場合、直接メンバー変数の名前を使うことができます. 第三に、関数では、この手紙の属するクラスの現在のオブジェクトを参照する必要があります.直接にthisを使用します.
これらの用法のまとめは、「thisは対象自身を指す一つの指針」という言葉をより深く理解したものです.
Javaのキーワードthisは方法の体内にしか使えません.オブジェクトが作成されると、Java仮想マシン(JVM)はこのオブジェクトに自身を参照するポインタを割り当てます.このポインタの名前はthisです.したがって、thisはクラス内の非静的な方法でしか使用できません.静的な方法と静的なコードブロックの中では絶対にthisが発生してはいけません.これは「Javaキーワードstatic、final使用総括」の文で明確に説明されています.また、thisは特定の対象だけと関連していますが、類とは関連していません.同じ種類の異なる対象は異なるthisがあります.
1 package test; 2 public class ThisTest { 3 private int i=0; 4 // : int
5 ThisTest(int i){ 6 this.i=i+1;// this i, i
7 System.out.println("Int constructor i——this.i: "+i+"——"+this.i); 8 System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1)); 9 // i this.i !
10 } 11 // : String
12 ThisTest(String s){ 13 System.out.println("String constructor: "+s); 14 } 15 // : int String
16 ThisTest(int i,String s){ 17 this(s);//this 18 //this(i);
19
20 this.i=i++;//this
21 System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s); 22 } 23 public ThisTest increment(){ 24 this.i++; 25 return this;// , (ThisTest)
26 } 27 public static void main(String[] args){ 28 ThisTest tt0=new ThisTest(10); 29 ThisTest tt1=new ThisTest("ok"); 30 ThisTest tt2=new ThisTest(20,"ok again!"); 31
32 System.out.println(tt0.increment().increment().increment().i); 33 //tt0.increment() tt0 i++ ThisTest , 34 // i++ ThisTest !
35 } 36 }
実行結果:Int constructor i——this.i: 10——11
String constructor: OK
String constructor: ok again
Int constructor: 21
String constructor: ok again
14
================================================================================================================
細かい問題の注釈はもうはっきり書いてあります.ここでは詳しく説明しないで、ただまとめてみます.実はthisは主に3つの使い方が必要です.
1、現在のオブジェクトに対する参照を表します。
2、関数パラメータではなくクラスのメンバー変数を表します.関数パラメータとメンバー変数の同名の名前は区別されます.実はこれは第一の用法の特例で、よく使われていますので、それを強調します.
3、構造方法で指定されたパラメータタイプを満たすコンストラクタを参照するために使用されます。しかし、ここで注意しなければならないのは、構造的な方法を参照するだけであり、開始位置にある必要があります。
それから注意します.thisはstaticの方法では使えません.だから、staticの方法の定義をあげる人もいます.thisがない方法です.誇張していますが、thisはstaticの方法では使えないと十分に説明しています.
どのような状況でthisを使う必要があるかを説明します. 第一に、thisによって別の構造方法を呼び出して、髪でthis(パラメータリスト)を送ります.これは類の構造方法の中だけで、他のところでは使えません. 第二に、関数パラメータまたは関数内の局所変数とメンバー変数が同名の場合、メンバー変数はブロックされています.この場合、メンバー変数にアクセスするには、「this.メンバー変数名」という方法でメンバー変数を参照する必要があります.もちろん、同名がない場合、直接メンバー変数の名前を使うことができます. 第三に、関数では、この手紙の属するクラスの現在のオブジェクトを参照する必要があります.直接にthisを使用します.
これらの用法のまとめは、「thisは対象自身を指す一つの指針」という言葉をより深く理解したものです.