Java中this关键字的作用

This 的作用

  • 解决类变量与局部变量重名问题
  • this永远代表的是调用某个变量或方法的类对象

先看看没有this的情况

class Person {

    private String name;

    Person(String name) {
        name = name;//这里的两个name都是构造方法形参的name,与类变量name无关
    }

    public void speak() {
        System.out.println("I am:" + name);
    }

}


class PersonTest {
    public static void main(String[] args) {
        Person person = new Person("武则天");
        person.speak();

    }
}

结果:

I am:null

由结果可见,我们调用有参构造方法的参数并没有传递给Person的类变量“name”

加上this关键字

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

结果

I am:武则天

二:this在构造函数之间的调用

class Person {

    private String name;
    private String position;

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

    Person(String name,String position){
        this(name);//注意:这里的this后面没有小数点,它就是代表一个对象的引用
        this.position=position;
    }

    public void speak(){
        System.out.println(name+"是大唐的"+position);
    }

}


class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person(" 狄仁杰","宰相");
        p1.speak();

    }
}

结果

狄仁杰是大唐的宰相

 

this的位置很重要。在构造函数当中,this必须放在第一行。

如下:把this(name)没有放在第一行,此时idea立即报错并提示this应该在第一行。

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

以下代码演示,请仔细阅读

class Person {

    private String name;
    private String position;

    Person(String name) {
        this.name ="武则天";
        System.out.println("i am---"+this.name);
    }

    Person(String name,String position){
        this(name);
        System.out.println("i am==="+name);
        this.name=name;

        this.position=position;
        System.out.println("i am"+name);

    }

    public void speak(){
        System.out.println(name+"是大唐的"+position);
    }

}


class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person(" 狄仁杰","宰相");
        p1.speak();

    }
}

结果

i am---武则天
i am=== 狄仁杰
i am 狄仁杰
 狄仁杰是大唐的宰相

后记:

2020年2月29日 星期六 上海 雨 冷 农历2020年二月初七

每4年才会有2月29日

原文地址:https://www.cnblogs.com/majestyking/p/12382488.html