首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速掌握this

快速掌握this

作者头像
田维常
发布2019-08-29 16:44:06
3750
发布2019-08-29 16:44:06
举报

看了就要关注我,喵呜~

定义

this是Java语言的关键字

this是一个引用对象本身的指针,用来表示当前对象,它只和对象有关系。

使用场景

使用this关键字引用成员变量

在Java语言中,当创建一个对象后,Java虚拟机就会为其分配一个指向该对象本身的指针,这个指针就是this。this只能用于在类的非静态方法或者构造方法中,在方法体内定义的变量叫做局部变量,在类的内部方法体以外定义的外部定义的变量称之为成员变量。如果成员变量和方法中的局部变量的名字相同,那么方法中成员变量将会白屏蔽。如果这个时候还要使用成员变量,就需要使用到关键字this。

使用方式和上面这段话的证明:

this.成员变量
public class MyThisDemo {
    private int age = 18;//成员变量age
    private String name = "Java后端技术栈";//成员变量name

    private void print0() {
        int age = 20;//局部变量age
        String name = "lawt";//局部变量name
        System.out.println("print0 age=" + age);
        System.out.println("print0 name=" + name);
    }

    private void print1() {
        int age = 20;//局部变量age
        String name = "lawt";//局部变量name
        System.out.println("print1 age=" + this.age);
        System.out.println("print1 name=" + this.name);
    }

    public static void main(String[] args) {
        MyThisDemo myThisDemo = new MyThisDemo();
        myThisDemo.print0();
        myThisDemo.print1();
    }
}

输出:

print0 age=20
print0 name=lawt
print1 age=18
print1 name=Java后端技术栈

在该类中定义了两个成员变量age和name。在print0print1方法中都定义了两个局部变量,并且成员变量和局部变量的名字是相同的。这样会导致方法中的局部变量将屏蔽掉成员变量,所以这时候使用this关键字就能解决被屏蔽的问题。

使用这种方法更通用的做法是在构造方法和set方法中使用,比如:

public class User {
    private int age;
    private String name;
    private String gender;
    public User(int age, String name, String gender) {
        //避免与构造方法入参名字冲突,所以使用了this修饰
        this.age = age;
        this.name = name;
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        //避免与setAge方法的入参冲突,所以增加了this修饰
        this.age = age;
    }
    //剩下几个get  set一样,这里就不贴代码
}

注意:

最燃方法中没有和成员变量重名的变量,也可以使用this来引用成员变量,但是一般情况下,如果用this来引用成员变量,也仅仅是在构造方法和set方法隐藏成员变量的时候使用。

使用this关键字引用当前对象

如果在类的方法中需要返回一个对象,并且该对象时方法所在的类的当前对象,可以使用this关键字作为方法的返回值。

public class User {

    public User getUser(){
        return this;
    }

    public User() {
    }
     public static void main(String[] args) {
        //创建用户类的对象
        User user=new User();
        //instanceof 严格来说是Java中的一个双目运算符
        //用来测试一个对象是否为一个类的实例
        System.out.println(user.getUser() instanceof User);
    }
}    

运行输出:true

这里定义的一个方法getUser方法,并使用this关键字返回当前的对象User,在main方法中创建一个User兵使用instanceOf来判断getUser方法返回的对象与User的关系。

使用this关键字调用构造方法

除了可以使用this关键字引用成员变量和引用当前对象以外,还可以实用this关键字调用构造方法;

public class User {
    private int age;
    private String name;
    private String gender;
    public User(int age, String name) {
        //调用下面三个入参的构造方法
        this(age, name, "man");
    }
    public User(int age, String name, String gender) {
        this.age = age;
        this.name = name;
        this.gender = gender;
    }
    //省略 set get 方法
    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
    public static void main(String[] args) {
        User user=new User(19,"lisi");
        System.out.println(user.toString());
    }
}

输出:

User{age=19, name='lisi', gender='man'}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • 使用场景
    • 使用this关键字引用成员变量
      • 使用this关键字引用当前对象
        • 使用this关键字调用构造方法
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档