【Java】(十六)Object类常用方法:getClass()、hashCode()、toString()、equals()、finalize()

Object类

在学习继承时,IDEA里面又快捷键Ctrl+H展开子父类继承关系。很容易发现,所有我们自建的类都默认继承Object类,因此成员变量都可以使用Object类中的方法。
在这里插入图片描述
0bject类中所定义的方法,是所有对象都具备的方法。
0bject类可以存储任何对象。作为参数,可接受任何对象;作为返回值,可返回任何对象。

具体哪些方法都可以在JDK API里面看,建议立马搜索或者下载一个。
在这里插入图片描述

getClass()方法

  1. 函数定义:public final Class<?> getClass() {}
    返回引用中存储的实际对象类型。
  2. 使用Class c1 = m1.getClass();
  3. 返回的是Class对象,目前简单理解:每当编写并且编译一个新创建的类就会产生一个对应Class对象并且这个Class对象会被保存在同名.class文件里(编译后的字节码文件保存的就是Class对象)。无论创建多少个实例对象,在JVM中都只有一个Class对象,即在内存中每个类有且只有一个相对应的Class对象
    参考:深入理解Java类型信息(Class对象)与反射机制
  4. 应用:通常用于判断两个引用中实际存储对象类型是否一致。

hashCode()方法

  1. 函数定义public int hashCode() {}
    返回该对象的哈希码值。
  2. 使用int n1 = m1.hashCode();
  3. 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值。
    一般情况下相同对象返回相同哈希码

toString()方法

  1. 函数定义:public String toString() {}
    返回该对象的字符串表示(默认表现形式:类的名称+@+把一个hashcode的值转成16进制的数字)。在这里插入图片描述

  2. 使用String s1 = m1.toString();

  3. 可以根据程序需求覆盖该方法【重写】,如:展示对象各个属性值

	@Override //快捷键【Alt+insert】→toString
    public String toString() {  //重写toString方法
        return "Member{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

equals()方法

  1. 函数定义:public boolean equals(Object obj){}
    返回一个布尔值。默认实现为(this == obj),比较两个对象地址是否相同。
  2. 使用boolean judge = m2.equals(m3)
  3. 可进行覆盖,重写了父类的方法,例如比较两个对象的内容是否相同。
	@Override   //快捷键【Alt+insert】→equals()and hashCode()
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Member)) return false;
        Member member = (Member) o;
        return age == member.age &&
                Objects.equals(name, member.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

手工equals()方法覆盖步骤

  1. 比较两个引用是否指向同一个对象。
  2. 判断obj是否为null。
  3. 判断两个引用指向的实际对象类型是否一致。
  4. 强制类型转换。
  5. 依次比较各个属性值是否相同。
	@Override
    public boolean equals(Object obj) {
        //1判断两个对象是否是同一个引用
        if (this == obj) {
            return true;
        }
        //2判断obj是否null
        if (obj == null) {
            return false;
        }
        //3判断是否是同一个类型
        if (obj instanceof Member) {
            //4强制类型转换
            Member s = (Member) obj;
            //5比较熟悉
            if (this.name.equals(s.getName()) && this.age == s.getAge()) {
                return true;
            }
        }
        return false;
    }

finalize()方法

  1. 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
  2. 垃圾对象“没有有效引用指向此对象时,为垃圾对象。
  3. 垃圾回收:由GC销毁垃圾对象,释放数据存储空间。
  4. 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
  5. 手动回收机制:使用System.gc();通知JVM执行垃圾回收。
package study.object;

/* //Member.java存放Member类
package study.object;

import java.util.Objects;

public class Member {
    String name;
    int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    //【Alt+insert→构造函数】
    public Member(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override //快捷键【Alt+insert】→toString
    public String toString() {  //重写toString方法
        return "Member{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

//    @Override   //快捷键【Alt+insert】→equals()and hashCode()
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (!(o instanceof Member)) return false;
//        Member member = (Member) o;
//        return age == member.age &&
//                Objects.equals(name, member.name);
//    }
//
//    @Override
//    public int hashCode() {
//        return Objects.hash(name, age);
//    }


    @Override
    public boolean equals(Object obj) {
        //1判断两个对象是否是同一个引用
        if (this == obj) {
            return true;
        }
        //2判断obj是否null
        if (obj == null) {
            return false;
        }
        //3判断是否是同一个类型
        if (obj instanceof Member) {
            //4强制类型转换
            Member s = (Member) obj;
            //5比较熟悉
            if (this.name.equals(s.getName()) && this.age == s.getAge()) {
                return true;
            }
        }
        return false;
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.name+"对象被回收。。。");
    }
}
 */

public abstract class mainText {
    public static void main(String[] args) {
        //创建对象
        Member m1 = new Member("张三",22);
        Member m2 = new Member("王五", 20);
        Member m3 = new Member("王五", 20);

        System.out.println("1.getclass()判断对象是否属于同一类型");
        Class c1 = m1.getClass();
        System.out.println("对象类型:"+c1);
        System.out.println("对象是否属于同类型:"+(m1.getClass()==m2.getClass()));

        System.out.println("2.hashCode()返回对象哈希码");
        int n1 = m1.hashCode();
        System.out.println("m1哈希码:"+n1);
        System.out.println("m2哈希码:"+m2.hashCode());

        System.out.println("3.重写toString()返回该对象的字符串表示");
        String s1 = m1.toString();
        System.out.println("m1字符串表示:"+s1);

        System.out.println("4.重写equals()判断对象值是否相等");
        boolean judge = m2.equals(m3);
        System.out.println("对象值是否相等:"+judge);

        System.out.println("5.finalize()手动回收机制");
        new Member("w1",22); //快捷键【Ctrl+D】复制到下一行
        new Member("w2",22);
        new Member("w3",22);
        System.gc();    //通知JVM执行垃圾回收
        System.out.println("回收");
    }
}

/*
1.getclass()判断对象是否属于同一类型
对象类型:class study.object.Member
对象是否属于同类型:true
2.hashCode()返回对象哈希码
m1哈希码:1163157884
m2哈希码:1956725890
3.重写toString()返回该对象的字符串表示
m1字符串表示:Member{name='张三', age=22}
4.重写equals()判断对象值是否相等
对象值是否相等:true
5.finalize()手动回收机制
回收
w对象被回收。。。
w对象被回收。。。
w对象被回收。。。
 */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值