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

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

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

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

小王被我这句话吓坏了,赶紧躲到自己岗位上改 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() 必须是构造方法中的第一条语句,否则就会报错。

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

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

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

04、链式调用

学过 JavaScript,或者 jQuery 的读者可能对链式调用比较熟悉,类似于 a.b().c().d(),仿佛能无穷无尽调用下去。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpssyz.html