关键字this
- 是一个系统隐含的指针被自动附加在非静态的成员函数参数列表中
- 当前时刻,哪个对象调用该函数,那么this就指向当前调用该函数的对象,系统会自动在该函数列表中添加一个隐藏的this指针,并且把调用该函数的对象的地址赋值给this指针。
- 这样以来,在函数的内部通过this就可访问当前正在调用该函数的对象的成员。
- 静态函数内部,没有this指针
where is this
class A
{
public int i;
public A(int j)
{
i = j ;
}
public void show()
{
System.out.println("i = "+i);
//相互等价System.out.printf("i = %d\n",this.i);
//相互等价System.out.printf("i = %d\n",i);
}
}
class B
{
public static void main(String[] args)
{
A aa1 = new A(5);
/**
aa1和aa2在内存中分别有各自的数据成员i,但是aa1和aa2公用show()方法,
show方法如何知道输出的i应该是哪个对象中的i?
实际上每个非static方法中都隐含这一个this指针,
指向当前正在调用该方法的对象
*/
A aa2 = new A(8);
aa1.show();
aa2.show();
}
}
程序运行示例:
——————————————————————————————
i = 5
i = 8
——————————————————————————————
How to do this
- 设类A中已经有一个数据成员 i
public int i = 99;
- 倘若我们想在构造函数的形式参数中再次定义一个 i
- 因为在实际编程的时候,把构造函数中的形参定义和类中数据成员名字一样是比较合理的
public A(int i)
{
//我们想把这个形式参数i的值赋值给调用该构造函数的对象的数据成员i
//我们该怎么做?
i = i; <-----这样子OK? 显然有些让人摸不着头脑
这时候this就会派上用场
this.i = i; <------这个语句表达的意思是把形参的值赋值
this指向的对象的数据成员i,因为this会指向调用该
构造函数的当前对象
}
程序示例:
class Student
{
private String name;
private int age;
public Student(String name,int age)
{
this.name = name; // 这个“this指针”指向了成员函数作用的对象
this.age = age;
}
public void OUTPUT_H()
{
System.out.println("学生姓名:"+this.name+" 学生年龄:"+this.age);
}
}
class Main
{
public static void main(String[] args)
{
Student A = new Student("xiaocaijiyimei",22);
A.OUTPUT_H();
}
}
程序运行示例:
——————————————————————————————
学生姓名:xiaocaijiyimei 学生年龄:22
——————————————————————————————