Java中的this 关键字

如何使用this关键字?

1、消除字段歧义

public class Writer {
    private int age;
    private String name;

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

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

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

当一个类的构造方法有多个,并且它们之间有交集的话,就可以使用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()必须是构造方法中的第一条语句,否则就会报错。

3、作为参数传递

在下例中,有一个无参的构造方法,里面调用了print()方法,参数只有一个this关键字。
从结果中我们可以看出来,this就是我们在main()方法中new关键字创建的ThisTest对象。

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

4、链式调用

类似于jQuery中的a.b().c().d()
this写在方法里

5、从内部类中访问外部类对象

说实话,自从Java 8的函数式编程出现后,就很少用到this在内部类中访问外部类对象了。来看一个示例:

在内部类InnerClass的构造方法中,通过 外部类.this 可以获取到外部类对象,然后就可以使用外部类的成员变量了。

-----------------------------------------

有的时候需要自己写一写才能记住,只是看看不动手很快就会忘记的。

也没什么人用this了吧

猜你喜欢

转载自blog.csdn.net/qq_37358143/article/details/107065132