1.this概念
(参考:http://www.cnblogs.com/xdp-gacl/p/3636071.html)
this是一个引用,它指向自身的这个对象,它的内存分析如下图。假设我们在堆内存new了一个对象,在这个对象里假设有一个引用this,this指向这个对象自己,所以这就是this,这个new出来的对象名字是什么,我们不知道,不知道也没关系,因为这并不影响这个对象在内存里面的存在,这个对象只要在内存中存在,他就一定有一个引用this。
2.this在方法中的应用--区分成员变量与局部变量
一个方法要运行的时候,一个jvm会在栈内存开辟一片属于这个方法的空间让这个方法在这个内存空间运行。
如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么java编译器会在该变量的 前面添加this关键字。 如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据,如下图,通过this将成员变量i和局部变量i分开。
3.this在构造函数中的应用--调用其他构造函数以及区分成员变量与局部变量
this关键字调用其他的构造函数时,this关键字必须要位于构造函数中 的第一个语句。
this关键字在构造函数中不能出现相互调用 的情况,因为是一个死循环。
public class ConstructFuction { public ConstructFuction() { } public ConstructFuction(int id) { this(); //调用无参数额构造方法 System.out.println(id); } public ConstructFuction(int id,int age) { this(id); //使用this调用其他构造函数 System.out.println(age); } public ConstructFuction(int id,int age,String name) { this(id,age); System.out.println(name); } }
4.this作为方法的返回值--返回对象本身
class ReturnObjectSelf { public String name="Hello World"; public ReturnObjectSelf returnObject() { return this; } }
5.this在内部类的使用
this在内部类中代表内部类,在外部类中代表外部类。
内部类调用外部类的成员变量,即可以直接调用,也可以用 类名.this.成员变量。
内部类调用外部类的变量时,要区分成员变量和局部变量,有冲突时,局部变量直接调用,成员变量用 类名.this.成员变量
public class InnerClassThis { public String outer="Hello Outer"; //内部类 public class InnerClassTest { public String inner="Hello Inner"; public void showInfo() { System.out.print(this.inner);//内部类调用内部类成员变量 System.out.print(outer); //内部类调用外部类的成员变量 System.out.print(InnerClassThis.this.outer); } } public void partClass() { String outer = "Hello Outer Part"; class PartClassTest { public void showInfo() { System.out.println(outer); //内部类调用外部类局部变量 System.out.print(InnerClassThis.this.outer); //内部类调用外部类成员变量 } } PartClassTest pct = new PartClassTest(); pct.showInfo(); } }
时间: 2024-10-10 19:53:41