• 非零基础自学Java (老师:韩顺平) 第7章 面向对象编程(基础部分) 7.10 this关键字


    非零基础自学Java (老师:韩顺平)

    ✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】

    第7章 面向对象编程(基础部分)

    7.10 this关键字
    7.10.1 举个栗子
    class Dog{
        public String name;
        public int age;
        
        public Dog(String dName , int dAge){
            name = dName;
            age = dAge;
        }
        
        public void info(){
            System.out.println(name + "\t" + age + "\t");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    问题:

    构造方法中的输出参数名不是很好,如果能够将dName改成name就好了,但是发现按照变量的作用域原则,name的值就是null,如何解决?

    【什么是this】

    java虚拟机会给每个对象分配 this,代表当前对象。

    举个栗子

    /**
     * ClassName: This01
     * date: 2022/9/2 20:37
     *
     * @author DingJiaxiong
     */
    
    public class This01 {
        public static void main(String[] args) {
            Dog dog1 = new Dog("大壮",3);
            System.out.println("dog1的hashcode = " + dog1.hashCode());
            dog1.info();
    
            System.out.println("==========");
            Dog dog2 = new Dog("大黄",2);
            System.out.println("dog2的hashcode = " + dog2.hashCode());
            dog2.info();
        }
    }
    
    class Dog{
        String name;
        int age;
    
        public Dog(String name , int age){ //构造器
            this.name = name;
            this.age = age;
    
            System.out.println("this.hashCode = " + this.hashCode());
        }
    
        public void info(){
            System.out.println("this.hashCode = " + this.hashCode());
            System.out.println(name + "\t" + age + "\t");
        }
    }
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36

    运行结果

    在这里插入图片描述

    • hashCode()方法定义在Object类中,任何类都包含hashCode()方法。
    • hashCode()方法的返回值是一个int整数,作用是获取哈希码(散列码),用来确定该对象在哈希表(散列表)中的索引位置。
    • hashCode()哈希表中才有用,在其他情况下没用。
    7.10.2 深入理解this

    从上面的例子中可以看到,每个对象的hashCode()的值都是一样的。

    意思就是:哪个对象调用,this就代表了哪个对象。

    韩老师图解:

    在这里插入图片描述

    7.10.3 this的注意事项和使用细节
    • this 关键字可以用来访问本类的属性、方法、构造器
    • this 用于区分当前类的属性和局部变量
    • 访问成员方法的语法:this.方法名(参数列表);
    • 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)
    • this 不能在类定义的外部使用,只能在类定义的方法中使用。
    7.10.4 this的课堂作业

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

    /**
     * ClassName: TestPerson
     * date: 2022/9/2 20:46
     *
     * @author DingJiaxiong
     */
    
    public class TestPerson {
        public static void main(String[] args) {
            Person p1 = new Person("Mary", 20);
            Person p2 = new Person("Mary",20);
    
            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;
        }
    
        //比较方法
        public boolean compareTo(Person p){
            return this.name.equals(p.name) && this.age == p.age;
        }
    }
    
    • 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

    运行结果

    在这里插入图片描述

  • 相关阅读:
    回溯搜索函数
    嵌入式开发--CubeMX使用入门教程
    Java-API简析_java.util.Objects类(基于 Latest JDK)(浅析源码)
    计算机网络学习笔记(5.传输层 6.应用层)
    【数据结构】二叉树的顺序结构及实现,堆,向上调整算法,向下调整算法,数组建堆算法,堆排序
    C++s简单实现Scoket编程
    内网渗透学习-环境搭建
    C++跑题教程——开始学习C++
    centos的root密码忘记或失效的解决办法
    详细sqli-labs(1-65)通关讲解
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126864040