this关键字
- this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)
- 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
- 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
public class Student {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void show() {
System.out.println(name + "," + age);
}
}
this内存原理
-
this代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象
-
示例代码:
public class StudentDemo { public static void main(String[] args) { Student s1 = new Student(); s1.setName("渣渣辉"); Student s2 = new Student(); s2.setName("张家辉"); } }
我们来看一道有关this的题目
//下列代码的运行结果是( )
//定义Person类
public class Person {
String name;
int age;
public void showName(String name){
System.out.print(this.name);
}
public void showAge(int age){
System.out.print(age);
}
}
//定义测试类
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
p1.name="张三";
p1.age=18;
Person p2 = new Person();
p2.name="李四";
p2.age=28;
p1.showName("Hello");
p1.showAge(99);
p2.showName("World");
p2.showAge(100);
}
}
A;张三 18 李四 28
B;Hello 99 World100
C;张三 99 李四 100
D;Hello 18 World 28
答案是 C
1.Person类中showName方法的参数名称和成员变量的名称相同,在方法体中输出 this.name, this是当前类的一个对象,哪个对象调用这个showName方法,那么this就代表哪个对象,并且this.name得到的是这个对象的成员变量name的值,并不是参数name的值,所以最终输出的是这个对象的成员变量name的值。
2.Person类中showAge方法的参数名称和成员变量的名称相同,在方法体中输出 age,变量查找遵守就近查找原则,所以最终输出的是参数age的值。
3.Test类中的main方法执行,先创建第一个Person对象p1,并分别给成员变量赋值,最终p1对象的成员变量name的值为"张三",成员变量age的值为 18,然后创建第二个Person对象p2,并分别给成员变量赋值,最终p2对象的成员变量name的值为 “李四”,成员变量age的值为 28,最后分别调用两个对象的成员方法。
流程详解:
执行p1.showName(“Hello”),输出p1对象的成员变量name的值,控制台会输出:“张三”;
执行p1.showAge(99),输出参数age的值,控制台会输出:99;
执行p2.showName(“World”),输出p2对象的成员变量name的值,控制台会输出:“李四”;
执行p2.showAge(100),输出参数age的值,控制台会输出:100; 所以最终控制台输出的结果为: 张三 99 李四 100
综上所述,正确答案是C