this引用
关键字this引用对象自身
可以在构造方法内部调用同一个类的其他构造方法;
使用this也可以引用隐藏数据域。
如:
public class Circle{ private double radius; public Circle(double radius){//有参构造方法 this.radius = radius;//显示使用this来引用被创建对象的数据域radius. } public Circle(){//无参构造方法 this(1.0); //使用this调用另一个有参构造方法,参数类型是double型的。 //使用方法是this(参数列表);在构造方法中,this(参数列表)语句要写在其他语句出现之前。 } public double getArea(){ return this.radius*this.radius*Math.PI;//每个实例变量都属于一个this表示的实例,通常在不引起歧义的情况下,这个this是被忽略的。 } }
在数据域的set方法里,经常将数据域名用作参数名。在这种情况下,这个数据域在set方法中被隐藏。为了给它设置新值,需要在方法中引用隐藏的数据域名。
隐藏的静态变量可以简单通过“类名.静态变量”引用(结果是这个类的所有对象共享这个参数的值)
隐藏的实例变量需要使用this来引用(结果是参数的调用对象的数据域)
public class F{ private int i = 5; private static double k = 0; public void setI(int i){ this.i = i;// //指向调用setI方法的那个对象,把传入的int型的参数i的值赋给那个对象的数据域i。 } public static void setK(double k){ F.k = k;////将double类型的参数k的值赋值给这个类的静态数据域k,属性k是被类的所有对象所共享的。 } }
总结:
this不能用在static方法中!
所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!
什么情况下需要用到this:
第一、通过this调用另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用
第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错。
第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的。