深入理解this关键字

Posted xiguadadage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解this关键字相关的知识,希望对你有一定的参考价值。

 

this是什么?

在Java语言中,当创建一个对象后,Java虚拟机就会为其分配一个指向对象本身的指针,这个指针就是“this”。

this关键字有哪些用法?

一、调用本类的成员变量

class Person{
    private String name;

    public Person(String name){
        this.name = name;
    }
}

上述代码中,构造方法中的形参与Person类的成员变量名称相同,如果不使用this关键字,不说我们,编译器也无法辨识出是将形参name赋给成员变量还是将成员变量name赋给形参,

所以this关键字可以指明参数是该类的成员变量,即this.name = name表示的是将形参name赋给成员变量name。

二、调用构造方法

class Person{
    private String name;
    private String sex;

    public Person(String name){
        this.name = name;
    }

    public Person(String name,String sex){
        this(name);
        this.name = name;
    }
}

当一个类中有多个含有不同参数的构造方法时,可以使用this调用其他的构造方法,而只要传入合适的参数即可。

当然这种this调用方式也有一定的限制

(1)使用this调用其他构造方法是必须放在该构造方法的第一行

(2)当类中有多个构造器使用this互相调用时,必须有一个构造器是不使用this调用其他构造器的,否则将造成互相调用的死循环,类似于递归算法,当然这种写法编译器也不会通过。

(3)在一个构造方法中只能调用一次

三、调用自身对象

public class Keyword_this {

    public static void main(String[] args){
        Person person1 = new Person("苹果大大个");
        person1.getInfo();
        System.out.println("我是谁=====>" + person1);
    }

}

class Person{
    private String name;

    public Person(String name){
        this.name = name;
    }

    public void getInfo(){
        System.out.println("我是谁=====>" + this);
    }
}

运行结果:

我是谁=====>[email protected]
我是谁=====>[email protected]

根据结果显示,main方法中直接打印出来的对象与getInfo方法中打印的this对象是同一个,也就是说this对方法来说就是调用方法的那个对象。

 

以上是关于深入理解this关键字的主要内容,如果未能解决你的问题,请参考以下文章

深入理解JavaScript中的this关键字

深入理解JS this,作用域

深入理解JavaScript系列(13):This? Yes,this!

[译文] 深入理解JavaScript中的this

深入理解javaScript系列:各种上下文中的this

对this关键字的深入探究