简述
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
主要用于以下方面:
- this表示调用者(对象),在方法内使用成员变量时候
- 调用用类中的其他方法(编译器自动添加)
- 用构造器调用其他构造器
示例
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 (包含链接).