java-库-Object

Object 是所有类的基类

//Object中的native方法 使用registerNatives()向JVM进行注册
private static native void registerNatives();

//获取运行时的 Class 类
public final native Class<?> getClass();

//hashCode()返回值,用于哈希表
//equals()为true,则hashCode()相等
//equals()为false,hashCode()也可以相等,但是最好不相等
//默认实现,返回对象的内存地址
public native int hashCode();

//比较两个对象是否逻辑上相等
//非null对象满足如下条件:
//自反性:x.equals(x)==true
//对称性:如果 x.equals(y)==true,则 y.equals(x)==true
//传递性:如果 x.equals(y)==true 和 y.equals(z)==true,则 x.equals(z)==true
//一致性:只要 x 和 y 状态不变,则 x.equals(y) 总是一致地返回 true 或者 false
//对null的比较:x.equals(null)总是false
//默认是比较内存地址
public boolean equals(Object obj) {}

//复制对象
//如果类没有实现 Cloneable,则调用 clone() 会抛出异常 CloneNotSupportedException
//因为 Object 没有实现 Cloneable,所以它调用 clone() 会抛出异常
protected native Object clone() throws CloneNotSupportedException;

//返回对象的字符串表示
//默认实现,<类名>@<hashCode的16进制>
public String toString() {}

//唤醒一个线程,这个线程正在等待本对象的monitor
//调用 notifty() 时,确保当前线程拥有本对象的monitor,如何拥有monitor:
//(1)调用 synchronized 方法
//(2)调用 synchronized(本对象) 代码块
//如果当前线程没有获取本对象的monitor,则抛出异常 IllegalMonitorStateException
public final native void notify();

//同 notify(),不同的是唤醒所有等待本对象的线程(线程被唤醒后,还需要等待获得monitor锁,没获得monitor锁的线程又会等待)
public final native void notifyAll();

//当前线程等待,直到其他线程调用本对象的 notify() 或 notifyAll() 或 中断当前线程 或 超时时间到。
//调用时,确保当前线程拥有本对象的monitor
//进入等待集中,并清除所有关于本对象的同步声明。
//直到被唤醒后,重新获得本对象的同步声明。
//注意;有可能会被虚假唤醒。
//timeout=0 表示永久等待
//throws: IllegalArgumentException - 超时时间为负
//throws: IllegalMonitorStateException - 没有获取本对象的monitor
//throws: InterruptedException - 当前线程等待唤醒之前或正在等待唤醒时,被其他线程中断
//如果先notify,后wait的线程不会被唤醒
public final native void wait(long timeout) throws InterruptedException;

//同 wait,除了多一个入参
public final native void wait(long timeout, int nanos) throws InterruptedException {}

//等同于wait(0)
public final void wait() throws InterruptedException {
    wait(0);
}

//在垃圾回收之前,JVM会调用此方法来清理资源
//finalize()方法具有如下4个特点:
//(1)永远不要主动调用某个对象的finalize()方法,该方法由垃圾回收机制自己调用;
//(2)finalize()何时被调用,是否被调用具有不确定性;
//(3)当JVM执行可恢复对象的finalize()可能会将此对象重新变为可达状态;
//(4)当JVM执行finalize()方法时出现异常,垃圾回收机制不会报告异常,程序继续执行。
protected void finalize() throws Throwable {}

equals()与hashCode()

equals()相等,则一定hashCode()相同。

equals()不相等,则hashCode()有可能相同(不同对象的哈希值可能冲突)。

hashCode()不相同,则一定equals()不相等。

子类重写Object方法

class Person {
    private String name;
    private int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

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

    @Override
    protected Person clone() {
        Person clone = new Person();
        clone.name = this.name;
        clone.age = this.age;
        return clone;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值