• java基础06


    一、Object类详解

    Object类是所有java类的根基类,也就意味着所有的java对象都拥有Object类的属性和方法。如果在类的声明中未使用extends关键子指明其父类,则默认继承Object类

    Object的方法摘要

    在这里插入图片描述

    equals方法

    ==
    在这里插入图片描述
    注意:基本数据类型==引用数据类型时,比较的也是值是否相等

    equals
    在这里插入图片描述

    补充:

    • java中的基本数据类型的包装类、String中的equals方法进行了重写,比较的是值/属性是否相同
    • 不重写的话,会继承Object类,然后比较地址
    • 看到==优先考虑是基本数据类型还是引用数据类型

    如何重写equals方法

    1. 判断是否同一对象
    2. 判断是否不为空
    3. 判断运行类型是否相同(或者说对象o是否为Person类或其子类所创建)
    4. 向下转型去判断属性是否相同
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;//判断当前对象和o是否同一个对象
            if (o == null || getClass() != o.getClass()) return false;//判断对象o是否为空,还有当前对象的运行时类型是否和o的相同
            Person person = (Person) o;//向下转型后才能比较各个属性
            return age == person.age && gender == person.gender && Objects.equals(name, person.name);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    hashCode方法

    在这里插入图片描述

    toString方法

    介绍:
    在这里插入图片描述

    重写:一般是输出对象的属性

        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", gender=" + gender +
                    '}';
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:直接输出对象等价于直接调用toString()方法

    finalize方法

    在这里插入图片描述

    在这里插入图片描述
    重写

    clone方法

    clone()方法是用于浅克隆或者深克隆一个java对象的,但是要注意一个误区:clone方法是Object类的,并不是Cloneable接口的,Cloneable只是一个标记接口,标记接口是用于标记实现该接口的类具有某种该接口标记的功能,常见的标记接口有三个:Serializable、Cloneable、RandomAccess,没有实现Cloneable接口,那么调用clone方法就会爆出CloneNotSupportedException异常。

    浅拷贝

    被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象

    也就是说,一个默认的clone()方法实现机制,仍然是赋值。在这里插入图片描述

    深拷贝

    深拷贝在浅拷贝的基础上,会将引用类型的引用对象再次复制一遍
    在这里插入图片描述

    代码演示

    package review;
    
    /**
     * @author 毕晶
     * @date 2022/8/6 5:36 PM
     */
    public class ShowCopy {
        public static void main(String[] args) throws CloneNotSupportedException {
            Person person = new Person("张三", 19, new Hobby());
            Person copyPerson = (Person) person.clone();
            System.out.println(copyPerson == person);//false
            System.out.println(copyPerson.hobby == person.hobby);//浅拷贝时为true,因为拷贝了引用;深拷贝时false
        }
    }
    
    class Person implements Cloneable {
        String name;
        int age;
        Hobby hobby;
    
        public Person(String name, int age, Hobby hobby) {
            this.name = name;
            this.age = age;
            this.hobby = hobby;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Hobby getHobby() {
            return hobby;
        }
    
        public void setHobby(Hobby hobby) {
            this.hobby = hobby;
        }
    //浅拷贝
    //    @Override
    //    protected Object clone() throws CloneNotSupportedException {
    //        return super.clone();
    //    }
    
        //深拷贝
        @Override
        protected Object clone() throws CloneNotSupportedException {
            Person person = (Person) super.clone();
            person.setHobby((Hobby) person.hobby.clone());
            return person;
        }
    
    }
    
    class Hobby implements Cloneable {
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    
    • 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
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    Date和String类型转换

    Date转String
    在这里插入图片描述
    String转Date
    在这里插入图片描述

    二、断点调试

    在这里插入图片描述

    在这里插入图片描述

    • 步过:单行执行
    • 步入:进入方法体内(自己写的方法)
    • 强制步入:强制进入方法体内(包括jdk的方法)
    • 步出:跳出方法体,就是返回上一层方法体内
    • resume:跳到下一个断点
    • 可以边调试边打断点
    • 也可以在jdk的源码上打断点
  • 相关阅读:
    Cannot connect to the Docker daemon at unix var run docker.sock解决方案
    解决vue 部分页面缓存,部分页面不缓存的问题
    云原生架构如何助力大数据和AI技术在软件开发中的深度整合
    c++模板的概念全新解释
    matlab绘制动图
    [会议分享]2022年欧洲计算机科学与信息技术会议(ECCSIT 2022)
    极光魔链(JMLink)使用教程
    vision transformer的位置编码总结
    Qt QChart 自定义qChartView(重写鼠标事件)完美实现缩放与平移(新增android下手势缩放实现)
    节点电价形成机制
  • 原文地址:https://blog.csdn.net/weixin_43903745/article/details/126197600