• 一个初学者对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();//调用无参的构造方法

        }

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

      }

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

  • 相关阅读:
    SQL Server中的事务与锁
    delphi中 dataset容易出错的地方
    Ehlib(Delphi控件) v9.2.024 D7-XE10.2 免费绿色特别版
    Delphi (Library Path Browsing Path)
    XML序列化和反序列化
    C#基础--Attribute(标签) 和 reflect(反射) 应用
    C#特性类的使用
    NOPI使用手册
    【WCF】错误处理(四):一刀切——IErrorHandler
    浅析C#中的事件
  • 原文地址:https://www.cnblogs.com/yangwanhao/p/7643264.html
Copyright © 2020-2023  润新知