this keyword details

学生类:
package com.itheima_07;
/*
 * 学生类
 * 
 * 起名字我们要求做到见名知意。
 * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进。
 * 
 * 如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近的原则。
 * 
 * 我们有没有办法把局部变量的name赋值给成员变量的name呢?
 * 有。
 * 
 * 什么办法呢?
 *         用this关键字就可以解决这个问题
 * 
 * this:代表所在类的对象引用
 *         方法被哪个对象调用,this就代表那个对象
 * 
 * 使用场景:
 *         局部变量隐藏成员变量
 */
public class Student {
    private String name;
    private int age;
    
    public void setName(String name) { //"林青霞"
        //name = name;
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    public void setAge(int age) {
        //age = age;
        this.age = age;
    }
    
    public int getAge() {
        return age;
    }
}
package com.itheima_07;
/*
 * 学生类的测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        System.out.println(s.getName()+"---"+s.getAge());
        
        s.setName("林青霞");
        s.setAge(28);
        System.out.println(s.getName()+"---"+s.getAge());
    }
}

首先setXxx和getXxx方法是为了数据的安全性,其次为了让名字做到见名知意,将a改成了age,n改成了name。输出结果相当于没有对name或者age赋值,这是因为在setName()和setAge()中的name和age都是局部变量,而不是让局部变量的值赋值给了这个类的成员变量,所以为了解决这个问题这里引入了this关键字就彻底解决了这个问题。this..name = name;因为this代表所在类的对象引用,所以this.name就是成员变量的name,而后面的name采用就近原则指的是局部变量的name。s来调用setName()方法,this就代表这个s。使用场景就是局部变量隐藏了成员变量。

原文地址:https://www.cnblogs.com/lzp123456-/p/9739674.html