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

时间:2022-09-20 08:56:07

简述


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

主要用于以下方面:

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


示例



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

[java] view plaincopyprint?
  1. class A  
  2. {  
  3.     public void run()  
  4.     {  
  5.         System.out.println("调用run");  
  6.     }  
  7.     public void jump()  
  8.     {  
  9.         //不用this指针怎么调用方法run()?  
  10.         //另外创建对象,再用对象调用方法  
  11.         A temp=new A();  
  12.         temp.run();  
  13.           
  14.         System.out.println("调用jump");  
  15.           
  16.     }  
  17. }  
  18.   
  19. public class ThisTest  
  20. {  
  21.     public static void main(String[] agrs)  
  22.     {  
  23.         //用this指针与不用this指针的对比  
  24.         A one=new A();  
  25.         one.jump();//一共创建了2个对象,一个在main里面,一个在调用jump时候。  
  26.     }  
  27.     /*输出: 
  28.     调用run 
  29.     调用jump 
  30.     */  
  31. }  

2.用This指针

[java] view plaincopyprint?
  1. class A  
  2. {  
  3.     public void run()  
  4.     {  
  5.         System.out.println("调用run");  
  6.     }  
  7.     public void jump()  
  8.     {     
  9.         //用this指针  
  10.         this.run();  
  11.         //一般直接省略 this.  
  12.         run();  
  13.         System.out.println("调用jump");     
  14.     }  
  15. }  

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

[java] view plaincopyprint?
  1. class A  
  2. {  
  3.     private int number;  
  4.     private String name;  
  5.   
  6.     public void set(int number,String name)  
  7.     {  
  8.         number=number;//在同名情况下用This指针,假如不用也可用编译通过,但是没有达到赋值效果  
  9.         name=name;//这样赋值,number,name都为默认初始值 0和null  
  10.         this.number=number;//这样编译器能知道给字段赋值  
  11.         this.name=name;   
  12.     }  
  13.     public void show()  
  14.     {  
  15.         System.out.println("number: "+number);//自动用this指针标识,this代表调用对象的空间  
  16.         System.out.println("name: "+name);//同样自动用this标识  
  17.     }  
  18. }  
  19. public class ThisTest  
  20. {  
  21.     public static void main(String[] agrs)  
  22.     {  
  23.         //用this指针与不用this指针的对比  
  24.         A one=new A();  
  25.         one.set(123,"yg");//传值过去时候自动标识对象  
  26.         A sec=new A();  
  27.         sec.set(456,"gg");        
  28.         one.show();  
  29.         sec.show();  
  30.     }  
  31.     /*输出: 
  32.     number: 123 
  33.     name: yg 
  34.     number: 456 
  35.     name: gg 
  36.     */  
  37. }  

4.用This修改构造函数

[java] view plaincopyprint?
  1. //用this指针修改构造函数,增强函数可读性  
  2. A(int number,String name){  
  3.   
  4.     this.number=number;  
  5.     this.name=name;   
  6.   
  7. }  

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

[java] view plaincopyprint?
  1.        A(){}  
  2.   
  3. A(int number,String name){  
  4.   
  5.     this.number=number;  
  6.     this.name=name;   
  7.     System.out.println(" 调用2个参数构造函数");  
  8.   
  9. }  
  10. A(int number,String name,String address){  
  11.     this(number,name);//直接调用第二个构造函数,消除了重复代码  
  12.     this.address=address;     
  13.     System.out.println("调用3个参数构造函数");             
  14. }  
[java] view plaincopyprint?
  1. 结果:  
  2. 调用2个参数构造函数  
  3. 调用3个参数构造函数  
  4. number: 123  
  5. name: yg  




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

转载自: http://blog.csdn.net/incyanggan/article/details/9337309