this关键字:
this代表所在类的一个对象引用。
下面以一个案例讲解,秒懂this关键字:package day07;
public class StudentDemo1 {
//定义属性
private String name;
private int age;
//定义访问变量的方法
public String getName(){
return name;
}
public void setName(String name){
name=name;//由于变量使用原则,就近原则所以会把name赋值给本身的name
}
public int getAge(){
return age;
}
public void setAge(int age){
name=name;//由于变量使用原则,就近原则所以会把age赋值给本身的age
}
}
测试类:
package day07;
public class StudentMainDemo1 {
/**
* @param args
*/
public static void main(String[] args) {
StudentDemo1 sd = new StudentDemo1();
//对变量赋值
sd.setName("李华");
sd.setAge(13);
System.out.println(sd.getName()+"****"+sd.getAge());
}
}
打印输出:
null****0
问题来了:为什么结果是null和0
原因就在set方法给变量赋值的时候出现的错误。
public void setName(String name){
name=name;//由于变量使用原则,就近原则所以会把那么赋值给本身的name
}
public void setAge(int age){
name=name;//由于变量使用原则,就近原则所以会把那么赋值给本身的name
}
我们所要使用的是成员变量name,所以只能用该类的对象调用成员变量name,所以在java中给我们提供了能够代表当前类的
对象的一个关键字---this关键字。
所以以上代码就可以修改为
package day07;
public class StudentDemo1 {
//定义属性
private String name;
private int age;
//定义访问变量的方法
public String getName(){
return name;
}
public void setName(String name){
this.name=name;//this指代的是当前类Student的对象
}
public int getAge(){
return age;
}
public void setAge(int age){
this.name=name;this指代的是当前类Student的对象
}
}
测试类不变:
package day07;
public class StudentMainDemo1 {
/**
* @param args
*/
public static void main(String[] args) {
StudentDemo1 sd = new StudentDemo1();
//对变量赋值
sd.setName("李华");
sd.setAge(13);
System.out.println(sd.getName()+"****"+sd.getAge());
}
}
输出:
李华****13
注意事项:
哪个对象调用这个方法,方法内部的this就代表那个对象。
使用场景:
局部变量隐藏成员变量的时候