this关键字

this关键字,只能在方法的内部使用,表示的是调用这个方法的那个对象的引用,this关键字的使用和平时new出来的对象引用的使用没什么区别。

需要注意的是,如果是在方法内部调用同一个类的另一个方法,就不用使用this关键字了。直接调用方法就行,因为即使你不写,编译器会自动帮你加上this关键字,但是你写的话也不会出错。

this关键字的使用时机是,只有当有明确要求指出要得到调用当前方法的这个引用的时候,方使用this关键字。

public class demo04 {
    public static void main(String[] args) {
        new Person().eat(new Apple());
    }
}

/**
 * 人类:
 * 人有一个动作,吃,吃的时候传入一个苹果
 */
class Person {
    public void eat(Apple apple) {
        Apple peeled = apple.getPeeler();
        System.out.println("yummy");
    }
}

/**
 * 削皮机:传入一个苹果就可把这个苹果削皮
 */
class Peeler {
    static Apple peel(Apple apple) {
        return apple;
    }
}

/**
 * 苹果类:假如由于某种特别的原因,削皮这个操作不能再削皮机这个类中完成,
 * 只能在苹果类中调用削皮机,这个时候,可以通过this关键字,把自己的apple
 * 实例,传入到削皮机的方法中
 */
class Apple {
    Apple getPeeler() {
        return Peeler.peel(this);
    }
}

上面的代码演示了,this关键字将当前对象传递给其它方法。

对于this关键字的核心理解很简单,其实当使用一个方法的时候,我们如果想知道,到底是谁使用了这个方法,那么我们就可以用this关键字,把这个对象召唤出来。

public class demo5 {
    public static void main(String[] args) {
        Student liming = new Student("黎明");
        System.out.println(liming);
    }
}

class Student{
    private String name;
    public Student(String name) {
        this.name = name;
        System.out.println(this);
    }
}

上面的代码我们做了一个实验,创建了一个学生类,重写了他的构造器,我们在构造器中打印了this关键字,并在main方法中打印了通过new创建出来的实例对象,看看这个this关键字和通过new出来的实例对象的引用liming,他们是不是指向同一个实例。

test_startic.Student@4554617c
test_startic.Student@4554617c

通过控制台的打印,我们看出来,他们的地址实际上是一摸一样的。也就是说,this关键字,指向的东西,就是new出来的那个对象。他们两个是同一个东西两种不同存在形式。

你可能感兴趣的:(this关键字)