您的位置:首页 > 编程语言 > Java开发

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

2014-11-27 22:16 573 查看


简述

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

主要用于以下方面:

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


示例

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

[java] view
plaincopyprint?

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指针

[java] view
plaincopyprint?

class A

{

public void run()

{

System.out.println("调用run");

}

public void jump()

{

//用this指针

this.run();

//一般直接省略 this.

run();

System.out.println("调用jump");

}

}

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

[java] view
plaincopyprint?

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修改构造函数

[java] view
plaincopyprint?

//用this指针修改构造函数,增强函数可读性

A(int number,String name){

this.number=number;

this.name=name;

}

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

[java] view
plaincopyprint?

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个参数构造函数");

}

[java] view
plaincopyprint?

结果:

调用2个参数构造函数

调用3个参数构造函数

number: 123

name: yg

作者:YangGan

出处:http://blog.csdn.net/incyanggan

本文基于署名
2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).

转载自: http://blog.csdn.net/incyanggan/article/details/9337309
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: