this的用途之一:在方法参数和成员变量同名时用this进行区分,表示想用类的成员变量,而非方法参数。
创建一个打电话的类:
public class Callone {
String name; // name是我的名字,who是对方名字
public void callSomeOne(String who) {
System.out.println(name + "在给" + who + "打电话");
}
}
实例化并使用,结果没有问题:
public class Democall {
public static void main(String[] args) {
Callone icall=new Callone();
icall.name="我";
icall.callSomeOne("你");
}
}
// 结果:我在给你打电话
若类中传入参数也叫name:
public class Callone {
String name; // name是我的名字
public void callSomeOne(String name) { // name也是对方名字
System.out.println(name + "在给" + name + "打电话");
}
}
那么结果为:
public class Democall {
public static void main(String[] args) {
Callone icall=new Callone();
icall.name="我";
icall.callSomeOne("你");
}
}
// 结果:你在给你打电话
这种情况的解释是,当方法的局部变量和类的成员变量重名时,就近原则优先使用局部变量,成员变量被屏蔽。此时若要使用成员变量,就需要用 “
this.成员变量名
” 的格式来引用成员变量如下:
public class Callone {
String name; // name是我的名字
public void callSomeOne(String name) { // name也是对方名字
System.out.println(this.name + "在给" + name + "打电话");
}
}
main程序里,通过谁调用了方法,谁就是this所指的。即,
this总是指向调用该方法的对象
。
此时,是通过icall对象调用了callSomeOne方法,icall就是这里的this,输出变回正常:
public class Democall {
public static void main(String[] args) {
Callone icall=new Callone();
icall.name="我";
icall.callSomeOne("你");
}
}
// 结果:我在给你打电话
版权声明:本文为Yqf745873310原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。