java中this的使用
1 package com.ssm.bean; 2 3 public class ThisTest { 4 private int i=0; 5 6 public int getI() { 7 return i; 8 } 9 10 public void setI(int i) { 11 this.i = i; 12 } 13 14 //第一个构造器:有一个int型形参 15 ThisTest(int i){ 16 this.i=i+1;//此时this表示引用成员变量i,而非函数参数i 17 System.out.println("Int constructor i——this.i: "+i+"——"+this.i); 18 System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1)); 19 //从两个输出结果充分证明了i和this.i是不一样的! 20 } 21 // 第二个构造器:有一个String型形参 22 ThisTest(String s){ 23 System.out.println("String constructor: "+s); 24 } 25 // 第三个构造器:有一个int型形参和一个String型形参 26 ThisTest(int i,String s){ 27 this(s);//this调用第二个构造器 28 //this(i); 29 /*此处不能用,因为其他任何方法都不能调用构造器,只有构造方法能调用他。 30 但是必须注意:就算是构造方法调用构造器,也必须为于其第一行,构造方法也只能调 31 用一个且仅一次构造器!*/ 32 this.i=i++;//this以引用该类的成员变量 33 System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s); 34 } 35 public ThisTest increment(){ 36 this.i++; 37 return this;//返回的是当前的对象,该对象属于(ThisTest) 38 } 39 40 public ThisTest test(){ 41 ThisTest thisTest = new ThisTest(3); 42 return thisTest; 43 } 44 public static void main(String[] args){ 45 ThisTest tt0=new ThisTest(10); 46 ThisTest tt1=new ThisTest("ok"); 47 ThisTest tt2=new ThisTest(20,"ok again!"); 48 49 System.out.println(tt0.i); 50 System.out.println(tt0.increment().i); 51 //tt0.increment()返回一个在tt0基础上i++的ThisTest对象, 52 //接着又返回在上面返回的对象基础上i++的ThisTest对象! 53 //tt0输出的i 是11.然后tt0.increment()代表还是ThisTest.然后tt0.increment().i输出的是 12. 54 System.out.println("----------------------"); 55 ThisTest thisTest = new ThisTest(2); 56 int i = thisTest.test().getI(); 57 //如果return this 输出的是3.因为this代表i=2这个ThisTest. 58 //如果return thisTest 输出的是4,代表的是thisTest这个引用对象。这个引用指向的是i=3这个ThisTest. 59 System.out.println(i); 60 } 61 62 }
总结下来:this有4种用法。
1):代表成员变量。也就是属性。this.i=i. 把形参赋值给当前属性。
2):this(i) 放在构造器的第一位,去调用另外的一个构造器。i 代表调用的那个构造器的参数。
3):调用别的方法。一般都直接写方法名了。
4):return this; 返回的是对象本身。一定要与对象引用区分开来。