04、调用当前类的构造方法
this() 可用于调用当前类的构造方法——构造方法可以重用了。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class InvokeConstrutor { InvokeConstrutor() { System.out.println("hello"); } InvokeConstrutor(int count) { this(); System.out.println(count); } public static void main(String[] args) { InvokeConstrutor invokeConstrutor = new InvokeConstrutor(10); } }
在有参构造方法 InvokeConstrutor(int count) 中,使用了 this() 来调用无参构造方法 InvokeConstrutor()。来看一下输出结果:
hello
10
果然,无参构造方法也被调用了,所以输出了“hello”。
也可以在无参构造方法中使用 this() 并传递参数来调用有参构造方法,来看下面这段代码:
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class InvokeParamConstrutor { InvokeParamConstrutor() { this(10); System.out.println("hello"); } InvokeParamConstrutor(int count) { System.out.println(count); } public static void main(String[] args) { InvokeParamConstrutor invokeConstrutor = new InvokeParamConstrutor(); } }
来看一下程序的输出结果。
10
hello
注意,this() 必须放在构造方法的第一行,否则就报错了,见下图。
05、作为参数在方法中传递
this 关键字可以作为参数在方法中传递,它指向的是当前类的对象。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class ThisAsParam { void method1(ThisAsParam p) { System.out.println(p); } void method2() { method1(this); } public static void main(String[] args) { ThisAsParam thisAsParam = new ThisAsParam(); System.out.println(thisAsParam); thisAsParam.method2(); } }
来看一下输出结果:
com.itwanger.twentyseven.ThisAsParam@77459877
com.itwanger.twentyseven.ThisAsParam@77459877
1
2
method2() 调用了 method1(),并传递了参数 this,method1() 中打印了当前对象的字符串。 main() 方法中打印了 thisAsParam 对象的字符串。从输出结果中可以看得出来,两者是同一个对象。
06、作为参数在构造方法中传递
this 关键字也可以作为参数在构造方法中传递,它指向的是当前类的对象。当我们需要在多个类中使用一个对象的时候,这非常有用。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class ThisAsConstrutorParam { int count = 10; ThisAsConstrutorParam() { Data data = new Data(this); data.out(); } public static void main(String[] args) { new ThisAsConstrutorParam(); } } class Data { ThisAsConstrutorParam param; Data(ThisAsConstrutorParam param) { this.param = param; } void out() { System.out.println(param.count); } }
在构造方法 ThisAsConstrutorParam() 中,我们使用 this 关键字作为参数传递给了 Data 对象,它其实指向的就是 new ThisAsConstrutorParam() 这个对象。
来看一下输出结果:
10
07、作为方法的返回值
this 关键字可以作为方法的返回值,这时候,方法的返回类型为类的类型。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class ThisAsMethodResult { ThisAsMethodResult getThisAsMethodResult() { return this; } void out() { System.out.println("hello"); } public static void main(String[] args) { new ThisAsMethodResult().getThisAsMethodResult().out(); } }
getThisAsMethodResult() 方法返回了 this 关键字,指向的就是 new ThisAsMethodResult() 这个对象,所以可以紧接着调用 out() 方法——达到了链式调用的目的。
来看一下输出结果:
hello
08、ending
“三妹,this 关键字我们就学到这里吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的双眼,疲惫地给三妹说。
“好的,二哥,我这就去练习去。”三妹似乎意犹未尽,这种学习状态真令我感到开心。