面向对象(6):this关键字
面向对象(6):this关键字
//定义一个学生类
class Student66{
//定义成员变量
private String name;
private int age;
//定义公共方法,供外界可以获取和赋值
//定义name的公共方法
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
//定义age的公共方法
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
//定义一个show方法,用来输出打印全部的成员变量
public void show(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Test66 {
public static void main(String[] args) {
//创建学生类Student06对象
Student66 x = new Student66();
//调用公共的方法,获取成员变量并赋值
//对x对象中的name进行赋值
x.setName("老李");//(如果获取成员变量不赋值,代码是:String name=x.setName();)
//对x对象中的age进行赋值
x.setAge(18);
//调用show()方法,输出所有的成员变量
x.show();
}
}
执行结果如下:
姓名:老李,年龄:18
Process finished with exit code 0
上面的案例中,如果我们将形参的名字,修改成和成员变量的名字一样,将n改为name,a改为age,如下:
public void setName(String name){
name = name;
}
public void setAge(int age){
age = age;
}
将形参的名字修改为和成员变量的名字一样,那么输出结果会发生变化,如下:
姓名:null,年龄:0
Process finished with exit code 0
分析:变量的调用遵循就近原则;赋值后的”老李“,会传送到name的公共方法中的(String a)中,将"老李"赋值给形参a,如果将形参a的名字改为和成员变量的名字一样:name,那就相当于传过来的”老李“,赋值给了(String name)中的name,name方法中的语句将不会执行,实际上,最终”老李“并没有赋值给成员变量
总结:当方法中的变量名和成员变量名一样时,实际上传来的实参的值后面进行赋值的时候,还是赋值给了方法上的变量,与成员变量没有关系
=======================================================================================
通过以上所分析,当形参的名字和成员变量的名字一样时,为了能让实参的值("老李")可以赋值给成员变量,Java提供一个关键字:this,代码如下:
其他地方不变,只需要修改两处:
public void setName(String name){
this.name = name;//这样写,就代表将传进来的实参,赋值给当前调用该方法的对象的成员变量name
}
public void setAge(int age){
this.age = age;//这样写,就代表将传进来的实参,赋值给当前调用该方法的对象的成员变量age
}
执行结果如下:
姓名:老李,年龄:18
Process finished with exit code 0
隐藏的this
public String getName(){
return name;//其实这里隐藏了this,全称是return this.name;
}
public int getAge(){
return age;//其实这里隐藏了this,全称是return this.age;
}
注意:当形参的变量名和成员变量名一样时,需要使用this
当形参的变量名和成员变量名不一样时,就不需要使用this

浙公网安备 33010602011771号