• Java基础32 this关键字


    · 什么是this?

    假如在一个类中使用变量表示年龄时,构造方法中使用的是pAge,成员变量使用的是age,这样程序的可读性很差。这时我们将一个类中表示年龄的变量进行统一的命名,例如都声明为age,但这样做又会导致另一个新的问题:成员变量和局部变量的名字冲突,在方法中无法访问成员变量age。所以为了解决这个问题,Java中提供了一个关键字 “this”指代当前对象,用在方法中访问对象的其他成员。

    · this的使用

    1.this.属性名

    指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)

    例如:

    class Person{
        int age;
        public Person(int age){
             this.age = age;
        }
        public int getAge(){
             return this.age;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    上面的代码中,构造方法的参数被定义为age,它是一个局部变量,在类中还定义了一个成员变量,名称也是age。在构造方法中如果使用"age",则是访问局部变量,但如果使用"this.age"则是访问成员变量(属性)。

    2.this.方法名

    用来访问本类的成员方法

    例如:在下面的 “speak()” 方法中,使用this关键字调用 “openMouth()” 方法。

    class Person{
       public void openMouth(){
           ...
       }  
       public void speak(){
           this.openMouth();
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意,此处的this关键字可以省略不写,也就是在上面的代码中,“this.openMouth()” 与 "openMouth()"的效果是完全一样的。

    3. this();

    访问本类的构造方法

    构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用 “this([参数 1, 参数 2…])” 的形式来调用其他的构造方法。

    例如:

    class Person{
        public Person(){
           System.out.println("无参的构造方法被调用了");  
        }
        public Person(String name){
           this();   //调用无参构造方法
           System.out.println("有参的构造方法被调用了");  
        }
    }
    
    public class t{
        public static void main(String[] args){
            Person p = new Person("coco"); //实例化对象
        }
    }
    
    Console:
    无参的构造方法被调用了
    有参的构造方法被调用了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在实例化Person对象时,调用了有参的构造方法,在该方法中通过 this() 调用了无参的构造方法,因此运行结果中显示两个构造方法都被调用了。

    在 this 调用构造方法注意的点:

    1. ()中可以有参数的 如果有参数 就是调用指定的有参构造
    2. 只能在构造方法中使用this调用其他的构造方法,不能再成员方法中使用。
    3. 在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次。

    · this的注意事项及使用细节

    1. this关键字可以用来访问本类的属性、方法、构造器
    2. this用于区分当前类的属性和局部变量
    3. 访问成员方法的语法:this.方法名(参数列表);
    4. 访问构造器的语法:this(参数列表); 【注意只能在构造器中使用,且必须放在第一行】
    5. this不能在类定义的外部使用,只能在类定义的方法中使用。

    · this的练习题

    定义Person类,里面有name、age属性,并提供compareTo比较方法,用于判断是否和另一个人相同,提供类用于测试,名字和年龄完全一样就返回true,否则就返回false。

    代码实现:

    public class Test{
         public static void main(String[] args){
             Person p1 = new Person("mary",20);
             Person p2 = new Person("mary",30);
    
             System.out.println("p1和p2比较的结果:" + p1.compareTo(p2));
         }
    }
    
    class Person{
        String name;
        int age;
        //构造器
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
        //compareTo比较方法
        public boolean conpareTo(Person p){
          // if(this.name.equals(p.name) && this.age == p.age){
          //   return true;
          // } else {
          //   return false;
          // }
          return this.name.equals(p.name) && this.age == p.age;
        }
    }
    
    
    Console:
    p1和p2比较的结果:false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    网络基础(day3)建议在电脑端注册登陆观看!!!
    DFS专题训练1
    【附源码】计算机毕业设计JAVA医院住院综合服务管理系统
    当输入 npm run xxx后发生了什么
    迁移使用 GH-ost/PT-osc 的源数据库
    Elastic Stack从入门到实践(一)--Elastic Stack入门(1)--Elasticsearch与Kibana入门
    java 分布式游戏服务器框架,集群游戏服务器框架,游戏服务器网关框架 ioGame 网络游戏服务器框架
    持续集成部署-k8s-资源调度:DaemonSet
    【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV4)模型算法详解
    【4天快速入门Python数据挖掘之第1天】Matplotlib的使用
  • 原文地址:https://blog.csdn.net/chenjiap/article/details/126716304