技术大佬:我去,你竟然还不会用 this 关键字(1)

简介: 技术大佬:我去,你竟然还不会用 this 关键字

上一篇文章写的是 Spring Boot 的入门,结果有读者留言说,Java 都还没搞完,搞什么 Spring Boot,唬得我一愣一愣的。那这篇就继续来搞 Java,推出广受好评的我去系列第四集:你竟然还不会用 this 关键字。


“老大,能给说详细地说说 this 关键字吗,总感觉对这个关键字的认知不够全面。”小王又过来找我了,他问的态度很谦逊,很卑微,但我还是忍不住破口大骂:“我擦,小王,你丫的竟然不会用 this,我当初是怎么面试你进来的!”


image.png


小王被我这句话吓坏了,赶紧躲到自己岗位上改 bug 去了。我呢,加班加点开始写这篇文章,真良心用苦啊。在 Java 中,this 关键字指的是当前对象(它的方法正在被调用)的引用,能理解吧,各位亲?不理解的话,我们继续往下看。


看完再不明白,你过来捶爆我,我保证不还手,只要不打脸。


01、消除字段歧义


我敢赌一毛钱,所有的读者,不管男女老少,应该都知道这种用法,毕竟写构造方法的时候经常用啊。谁要不知道,过来,我给你发一毛钱红包,只要你脸皮够厚。


public class Writer {
    private int age;
    private String name;
    public Writer(int age, String name) {
        this.age = age;
        this.name = name;
    }
}


Writer 类有两个成员变量,分别是 age 和 name,在使用有参构造函数的时候,如果参数名和成员变量的名字相同,就需要使用 this 关键字消除歧义:this.age 是指成员变量,age 是指构造方法的参数。


02、引用类的其他构造方法


当一个类的构造方法有多个,并且它们之间有交集的话,就可以使用 this 关键字来调用不同的构造方法,从而减少代码量。


比如说,在无参构造方法中调用有参构造方法:


public class Writer {
    private int age;
    private String name;
    public Writer(int age, String name) {
        this.age = age;
        this.name = name;
    }
    public Writer() {
        this(18, "沉默王二");
    }
}



也可以在有参构造方法中调用无参构造方法:


public class Writer {
    private int age;
    private String name;
    public Writer(int age, String name) {
        this();
        this.age = age;
        this.name = name;
    }
    public Writer() {
    }
}


需要注意的是,this() 必须是构造方法中的第一条语句,否则就会报错。


image.png


03、作为参数传递


在下例中,有一个无参的构造方法,里面调用了 print() 方法,参数只有一个 this 关键字。


public class ThisTest {
    public ThisTest() {
        print(this);
    }
    private void print(ThisTest thisTest) {
        System.out.println("print " +thisTest);
    }
    public static void main(String[] args) {
        ThisTest test = new ThisTest();
        System.out.println("main " + test);
    }
}



来打印看一下结果:


print com.cmower.baeldung.this1.ThisTest@573fd745

main com.cmower.baeldung.this1.ThisTest@573fd745

1

2

从结果中可以看得出来,this 就是我们在 main() 方法中使用 new 关键字创建的 ThisTest 对象。


相关文章
|
8月前
|
C#
30.C# 关键字 this初步学习
30.C# 关键字 this初步学习
47 1
|
存储 算法 编译器
带你了解并掌握一些C++关键字的使用
带你了解并掌握一些C++关键字的使用
108 0
|
7月前
|
Java API
RentrantLock关键字详解
RentrantLock关键字详解
|
8月前
|
Java
|
8月前
|
C++
|
8月前
|
编译器 C语言
初识关键字
初识关键字
|
Java
关键字this
关键字this
71 0
|
SQL
基础关键字
基础关键字
96 0
单链表删除第一次关键字
删除第一次出现关键字为key的节点