面向对象(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

posted @ 2021-12-05 17:04  阿伟宝座  阅读(37)  评论(1)    收藏  举报