1. Object类

4c2db620c4e3e4498f9dad2f86872163

0. 关键方法

e200007c15624ba29207d5b492590323

1. equals()方法

682ec2fa4f1db7ecb41990be4c619dd5
db75efbac77e1a9d31ef13d37cf42ef8

2. hashCode()方法

d9f50685ffa9b9a3528b25dec1271113

3. toString()方法

全类名:包名 + 类名

621c7bcbc668fd15053fb35229957a3e

4. finalize()方法

fead1d98aaefcdc8fd8e2d1a06f471af

代码示例

package com.baidu.www;

public class Finalize_ {
    public static void main(String[] args) {
        Car bm = new Car("BBA");
        bm = null; // Car对象成为垃圾,没有任何引用
        // 垃圾回收器回收(销毁)对象
        // 在回收前,会调用该对象的finalize方法
        // 可以finalize中更改业务逻辑代码,例如释放资源:数据库连接 / 打开文件

        System.out.println("a");

        System.gc();
        /**
         * 系统有自己的回收机制
         * 但可以尝试主动调用销毁机制
         */
    }
}

class Car{
    private String name;

    public Car(String name) {
        this.name = name;
    }

    // finalize重写
    @Override
    protected void finalize() throws Throwable {
//        super.finalize();
        System.out.println("正在销毁...");
    }
}

运行结果

a
正在销毁...

2. 具体代码

(1)类成员方法

代码示例

package com.baidu.www;

/**
 * Object类:
 *      概述:
 *          类层次结构最顶层的基类,所有类都直接或间接的继承自Object类
 *      构造方法:
 *          public Object()
 *      成员方法:
 *          int hashCode();        // 返回对象的哈希码值
 *          Class<?> getClass();   // 返回该调用者的字节码文件对象
 *          String toString();     // 返回该对象的字符串表示形式
 *          boolean equals();      // 比较两个对象是否相等
 *      注意:
 *          java.lang包下的类可以直接使用,不需要导包。
 */

public class Test {
    public static void main(String[] args) {
        // 非静态方法
        // 通过 对象名. 的形式调用
        // 1. 创建Object类型的对象
        Object obj1 = new Object();
        Object obj2 = new Object();

        // 2. 测试Object类中的成员方法
        // int hashCode();
        // 不同对象的哈希码值一般不同
        int code1 = obj1.hashCode();
        int code2 = obj2.hashCode();

        System.out.println(code1);
        System.out.println(code2);

        // Class<?> getClass();
        // 返回调用者的字节码文件对象,一个类只有一个字节码文件对象
        Class clazz1 = obj1.getClass();
        Class clazz2 = obj2.getClass();
        System.out.println("===========================");
        System.out.println(clazz1);
        System.out.println(clazz2);

        // String toString();
        // 返回该对象的字符串表示形式
        // 默认打印的是地址值,但是不同对象的地址值肯定不同
        // 地址值的组成:全类名 @ 对象的哈希码的无符号十六进制形式
        /**
         *     public String toString() {
         *         return getClass().getName() + "@" + Integer.toHexString(hashCode());
         *     }
         *     
         *     getClass().getName()              全类名
         *     Integer.toHexString(hashCode())   十六进制的哈希码值
         */
        String s1 = obj1.toString();
        String s2 = obj2.toString();
        System.out.println("===========================");
        System.out.println(s1);
        System.out.println(s2);

        // boolean equals();
        // 比较两个对象是否相等 默认比较的是地址值,无意义
        // 子类一般都会重写这个方法
        boolean b1 = obj1.equals(obj2);
        System.out.println("===========================");
        System.out.println(b1);
    }
}

(2)JavaBean重写Object类方法

579501ae93bad4d89e8f6c45f84cf052

(1)Student类

代码示例

package com.baidu.www;

import java.util.Objects;

// 学生类
public class Student {
    // 成员变量
    private int id;       // 编号
    private String name;  // 姓名
    private int score;    // 成绩

    // 构造方法
    public Student() {
    }

    public Student(int id, String name, int score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    // 成员方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    // toString方法:将对象转成其对应的字符串形式
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", score=" + score +
                '}';
    }

    // equals方法:用来比较两个对象是否相同
    // 自定义版本的重写
//    public boolean equals(Object obj){ // s1.equals(s2)
//        /*
//            this:谁调用,表示谁 s1
//            obj:s2
//         */
//        return this.id == ((Student) obj).id;  // 向下转型
//    }

    // 通过快捷键的方式生成
    @Override
    public boolean equals(Object o) {
        // 比较两个对象的地址值是否相同
        // 提高效率
        if (this == o)
            return true;
        // 省略this
        // 判断要比较的两个对象是否是同一个类型的对象
        // 提高程序健壮性
        if (o == null || getClass() != o.getClass())
            return false;
        // 向下转型
        // 正常的逻辑代码
        Student student = (Student) o;
        return id == student.id
                && score == student.score
                && Objects.equals(name, student.name);
    }
}

(2)Test类

代码示例

package com.baidu.www;

/**
 * 需求:
 *      定义一个标准的JavaBean类,并在测试类中进行测试
 *
 *      学生类: Student
 *      属  性: id   (编号)
 *              name (名字)
 *              score(成绩)
 *
 *      注意:
 *          实际开发中,我们把两个对象各个属性值都相同的情况下,才会认为这两个对象是同一个对象
 */

public class Test {
    public static void main(String[] args) {
        // 测试toString()方法
        // 创建学生类的对象
        Student s1 = new Student(1,"刷刷",100);
        Student s2 = new Student(1,"刷刷",100);

        // 输出语句直接打印对象
        // 默认调用了该对象的toString方法
        System.out.println(s1);
        System.out.println(s1.toString());

        // 测试equals方法 s1.equals(s2)
        System.out.println(s1.equals(s2));
    }
}

3. 练习题

5fb31577dc50748d4799e89366278491

posted @ 2025-08-20 10:10  无敌美少女战士  阅读(3)  评论(0)    收藏  举报