java基础06--Object类详解、断点测试

一、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);
    }

hashCode方法

在这里插入图片描述

toString方法

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

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

    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }

注意:直接输出对象等价于直接调用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();
    }
}

Date和String类型转换

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

二、断点调试

在这里插入图片描述

在这里插入图片描述

  • 步过:单行执行
  • 步入:进入方法体内(自己写的方法)
  • 强制步入:强制进入方法体内(包括jdk的方法)
  • 步出:跳出方法体,就是返回上一层方法体内
  • resume:跳到下一个断点
  • 可以边调试边打断点
  • 也可以在jdk的源码上打断点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值