this 表示的是当前对象的引用 ,常见于 普通方法和构造方法中的使用
1.普通方法的使用
package com.caolh._5InitializationAcleanup;//: initialization/_5_7Leaf.java
// Simple use of the "this" keyword.
public class _5_7Leaf {
int i = 0;
_5_7Leaf increment() {
i++;
return this; //返回的是当前对象的this 引用
}
void print() {
System.out.println("i = " + i);
}
public static void main(String[] args) {
_5_7Leaf x = new _5_7Leaf();
x.increment().increment().increment().print();//链式调用,可以连续调用函数
}
} /* Output:
i = 3
*///:~
2.构造函数的使用
生成对象,就是要调用构造函数,构造函数 嵌套构造函数调用,一层一层向上找
注意三点:1.构造函数嵌套调用 ,被嵌套的,必须在第一行
2.被嵌套的构造函数不得调用1次以上
3.普通方法不能调用构造函数
package com.caolh._5InitializationAcleanup;//: initialization/Flower.java
// Calling constructors with "this"
public class Flower {
int petalCount = 0;
String s = "initial value";
Flower(int petals) {
petalCount = petals;
System.out.println("Constructor w/ int arg only, petalCount= "
+ petalCount);
}
Flower(String ss) {
System.out.println("Constructor w/ String arg only, s = " + ss);
s = ss;
}
Flower(String s, int petals) {
//! System.out.println("String & int args"); //构造函数必须在第一行
this(petals);
//! this(s); // 构造函数不得调用1次以上
this.s = s; // Another use of "this"
System.out.println("String & int args");
}
Flower() {
this("hi", 47);
System.out.println("default constructor (no args)");
}
void printPetalCount() {
//! this(11); // 普通方法不得调用构造函数
System.out.println("petalCount = " + petalCount + " s = "+ s);
}
public static void main(String[] args) {
Flower x = new Flower();
x.printPetalCount();
}
} /* Output:
Constructor w/ int arg only, petalCount= 47
String & int args
default constructor (no args)
petalCount = 47 s = hi
*///:~