java中this关键字作用

在Thingking In Java 一书中,指出this关键字有两个作用
一、对当前对象的引用

 比如,有这一段代码:

public class L1 {
	private int i=0;
	
	public L1 increment(){
		i++;
		return this;//通过return返回对当前对象的引用。
	}
	
	public L1 (int i){
		this.i=i;//this指向了当前对象引用,并访问了类的实例成员变量i
	}
	
	void print(){
		/*......*/
	}
	
	public static void main(String[] args){
		L1 x=new L1(1);
		x.increment().increment().increment().print();
	}
	
}

 在上面这段代码中,第一个this关键字指向了对象x,并由increment()方法通过return返回对象引用,实现

了在一条语句中对同一个对象的多次操作。第二个this关键字同样指向了对象x,并访问了其实例成员变量i。当然

还可以访问实例成员方法,代码中没写。总之,这些都指的是对当前对象的引用。

 注:只有当需要明确指出对当前对象的引用时,才需要使用this关键字。比如:

public class A{
	void p1(){/*.....*/}
	void p2(){p1.();/*.....*/}
}
 在p2内部,可以写this.p1(),但无此必要

二、在构造器中调用构造器

 为了避免写重复代码,可用this 关键字做到这一点。比如:有下面这一段代码

public class Flower {
	int petalCount=0;//花瓣初始为0;
	String s="initial value";
	
	Flower(int petals){//第一个构造器
		petalCount=petals;
		System.out.println("1,petalCount="+petalCount);
	}
	
	Flower(String ss){//第二个构造器
		System.out.println("2,s="+ss);
	}
	
	Flower(String s,int petals){//第三个构造器
		this(petals);//在第三个构造器中调用第一个构造器
		/* this(s);
		 * this(petals);
		 * 是不可以的,不能同时调用两个或两个或以上构造器
		 */
		this.s=s;
		System.out.println("3");
	}
	
	Flower(){//第四个构造器
		this("hi",100);//在第四个构造器中调用第三个构造器
		System.out.println("4");
	}
	
	
	void printPetalCount(){
		/*
		 * this(99);这种写法是错误的,因为出构造器外,编译器
		 * 禁止在其他方法中调用构造器
		 */
		System.out.println("petalCount="+petalCount+"s="+s);
	}
	
	
	public static void main(String[] args){
		Flower flower=new Flower();
		flower.printPetalCount();
	}
}


/*
输出结果
1,petalCount=100
3
4
petalCount=100 s=hi
*/

为了方便理解和阅读,我将构造器打印结果用数字代替,通过上面的代码和注释,可以清楚的知道this关

键字的第二个作用和使用的注意事项,下面不在阐述。


你可能感兴趣的:(java学习)