简述
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(包含链接).
转载自: http://blog.csdn.net/incyanggan/article/details/9337309