一个初学者对Java中this关键字的理解

此文章仅代表个人想法,如果您发现文章中有错误或者其他问题,请在评论区指出,不胜感激

对于初学者来说,this关键字一般来说有三种应用:

一:(访问成员变量)

  通过this关键字可以明确的访问一个类的成员变量,解决了与局部变量名称冲突的问题。

class Person

{

  int age;

  //定义一个无参的构造方法

  //我忘了从哪本书上看的,上边说在类中最好都定义一个无参的构造方法,具体原因如果哪位大神理解请在评论中解答,谢谢

  public Person(){}

  //定义一个带一个形参的构造方法

  public Person(int age)

  {

    this.age=age;

  }

}

  这是一段最基本的代码,带形参的构造方法的参数被定义为age,这是一个局部变量,此外在类中还定义了一个成员变量,也叫age。两个变量名字相同,Java虚拟机在编译过程中如何判断该使用哪个变量?这个时候this关键字就起作用了。代码中this.age代表的是成员变量,也叫对象属性,而age代表的是局部变量。也就是说,在构造方法中使用“this.age”访问的是成员变量,而使用“age”则是访问局部变量。代码this.age=age;其实就是将局部变量(形参)的值赋给了成员变量。

二:(调用成员方法)

  通过this关键字可以调用成员方法。

class Person

{

  public void speak()

  {

    System.out.println("我是一个人");

  }

  public void introduce()

  {

    this.speak();

    System.out.println("我是一个好人");

  }

}

  在introduce()方法中调用speak()方法,使用了this关键字。不过,此处的this可以省略不写。也就是说“this.speak();”和“speak();”的效果是完全一样的。这个不需要过多介绍。

三:(调用构造方法)

  构造方法是在创建对象的时候被Java虚拟机自动调用的,在程序中不能像其他自定义方法那样被调用。但是在构造方法中可以使用this(参数1,参数2......)的形式来调用其他的构造方法。

这段代码的运行结果如下:

  也就是说,在实例化Person对象时,调用了有参的构造方法,又在该方法中通过“this();”调用了无参的构造方法。因此运行结果显示两个构造方法。

  但是,在使用this调用类的构造方法时,应该注意三点:

  1、只能在构造方法中调用构造方法,不能在成员方法中调用。

  2、在构造方法中,使用this调用构造方法的语句必须位于第一行,而且只能出现一次

  public Person()

  {

    int age=18;

    this(age); //在无参的构造方法中调用有参的构造方法,但是不在第一行,编译错误。

  }

  3、不能在一个类的两个构造方法中使用this互相调用

  class Person

  {

    //定义无参的构造方法

    public Person()

    {

      this(18);//调用有参的构造方法

    }

    //定义有参的构造方法

    public Person(int age)

    {

      this();//调用无参的构造方法

    }

    //这段代码中由于有参的构造方法和无参的构造方法相互调用了,所以编译会报错!

  }

这次就写这么多吧,欢迎大神来指点!

原文地址:https://www.cnblogs.com/yangwanhao/p/7643264.html