this关键字:
this关键字在方法体中,用于指代调用该方法的当前对象,简单的说:哪个对象调用方法,this指的就是哪个对象。严格来讲,在方法中需要通过this关键字来致命当前的对象。
下面我们创建一个A类,里面有三个方法和一个int型变量num,代码如下:
class A {
int num = 0;
public void Num(int num) {
this.num = num;
System.out.println(num);
System.out.println(this.num);
}
public void normalNum(int num) {
num = num;
System.out.println(num);
System.out.println(this.num);
}
public void thisNum(int num) {
System.out.println(this.num);
this.Num(num);
}
}
测试代码如下:
public static void main(String[] args) {
int num = 10;
A a = new A();
a.normalNum(num);
}
输出结果:
10
0
证明A类中的属性num没有被修改,这里的num=num只是对传进来的参数又赋值了一次。
测试代码2:
public static void main(String[] args) {
int num = 10;
A a = new A();
a.Num(num);
}
输出结果:
10
10
调用了A类中的num方法 方法中用this.num表示被引用对象中的num,也就是A类中的num。
测试代码3:
public static void main(String[] args) {
int num = 10;
A a = new A();
a.thisNum(num);
}
输出结果:
0
10
10
在调用this.Num(num)前先打印A类中num的结果,是初值0
通过this调用A类中的Num(num)方法将num的值赋给A类中的num。
测试代码4:
public static void main(String[] args) {
int num = 10;
A a = new A();
A a2 = new A();
a.thisNum(num);
a.print();
a2.print();
}
输出结果:
0
10
10
10
0
虽然a和a2都new了一个A,但是却不是同一个引用,这两个A在内存中是不同的两个A,由a和a2分别指向两个对象。所以a对A类中属性的修改对a2是无效的。也说明了谁引用的对象,这个对象的this属性就归谁用。
A类中添加如下代码:
class A {
public A(){
this(20);
}
public A(int num) {
this.num = num;
}
……
}
测试代码5:
public static void main(String[] args) {
A a = new A();
a.print();
}
输出结果:
20
在执行无参构造时用this(num)调用A(num)为num赋初值为20.
总结:
1、this(参数列表),只能在构造方法中使用。
2、当局部变量和成员变量同名的情况下必须使用this指定成员变量的变量名。如果二者名称不同,系统会自动隐含一个this,可以不写。3、在方法中需要引用所属类的当前的另一个方法时需要使用this指定。