`
incyanggan
  • 浏览: 32658 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java菜鸟学习笔记--面向对象篇(四):This指针

 
阅读更多

简述


Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

主要用于以下方面:

  1. this表示调用者(对象),在方法内使用成员变量时候
  2. 调用用类中的其他方法(编译器自动添加)
  3. 用构造器调用其他构造器


示例



1.没有this情况下,如何调用同类中的方法?

class A
{
	public void run()
	{
		System.out.println("调用run");
	}
	public void jump()
	{
		//不用this指针怎么调用方法run()?
		//另外创建对象,再用对象调用方法
		A temp=new A();
		temp.run();
		
		System.out.println("调用jump");
		
	}
}

public class ThisTest
{
	public static void main(String[] agrs)
	{
		//用this指针与不用this指针的对比
		A one=new A();
		one.jump();//一共创建了2个对象,一个在main里面,一个在调用jump时候。
	}
	/*输出:
	调用run
	调用jump
	*/
}

2.用This指针

class A
{
	public void run()
	{
		System.out.println("调用run");
	}
	public void jump()
	{	
		//用this指针
		this.run();
		//一般直接省略 this.
		run();
		System.out.println("调用jump");	
	}
}

3.当局部变量和Field同名时候采用this指针

class A
{
	private int number;
	private String name;

	public void set(int number,String name)
	{
		number=number;//在同名情况下用This指针,假如不用也可用编译通过,但是没有达到赋值效果
		name=name;//这样赋值,number,name都为默认初始值 0和null
		this.number=number;//这样编译器能知道给字段赋值
		this.name=name;	
	}
	public void show()
	{
		System.out.println("number: "+number);//自动用this指针标识,this代表调用对象的空间
		System.out.println("name: "+name);//同样自动用this标识
	}
}
public class ThisTest
{
	public static void main(String[] agrs)
	{
		//用this指针与不用this指针的对比
		A one=new A();
		one.set(123,"yg");//传值过去时候自动标识对象
		A sec=new A();
		sec.set(456,"gg");		
		one.show();
		sec.show();
	}
	/*输出:
	number: 123
	name: yg
	number: 456
	name: gg
	*/
}

4.用This修改构造函数

	//用this指针修改构造函数,增强函数可读性
	A(int number,String name){
	
		this.number=number;
		this.name=name;	

	}

5.This应用于多个构造函数

        A(){}
	
	A(int number,String name){
	
		this.number=number;
		this.name=name;	
		System.out.println(" 调用2个参数构造函数");

	}
	A(int number,String name,String address){
		this(number,name);//直接调用第二个构造函数,消除了重复代码
		this.address=address;	
		System.out.println("调用3个参数构造函数");			
	}
结果:
调用2个参数构造函数
调用3个参数构造函数
number: 123
name: yg




作者:YangGan
出处:http://blog.csdn.net/incyanggan
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics