Java | Object源码分析

xiaoxiao2022-06-12  34

前言

Object类是Java类层次结构的根。也就是说,Object类是所有类的父类。所有的对象,包括数组,都实现了这个类的方法。

源码分析

定义

public class Object { ... }

Object类的定义就是一个普通的类的定义。

getClass()方法

public final native Class<?> getClass();

getClass()方法返回该对象运行时的Class对象。

hashCode()方法

public native int hashCode();

hashCode()方法返回该对象的哈希值,默认是该对象的内存地址。该方法通常用于哈希表,比如HashMap。

equals()方法

public boolean equals(Object obj) { return (this == obj); }

equals()方法比较该对象是否“等于”另一个对象。该方法等同于"=="操作符,即直接比较两个引用所指向的内存地址,内存地址相等表示是同一个对象。

clone()方法

protected native Object clone() throws CloneNotSupportedException;

clone()方法创建并返回该对象的一个副本。

toString()方法

public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

toString()方法返回该对象的字符串表示形式。返回的字符串应该简洁但信息丰富,让人易于阅读。建议所有的子类都重写该方法。

notify()方法

public final native void notify(); public final native void notifyAll();

notify()方法唤醒正在等待该对象的单个线程。notifyAll()方法唤醒所有正在等待该对象的线程。

wait()方法

public final native void wait(long timeout) throws InterruptedException; public final void wait(long timeout, int nanos) throws InterruptedException { ... if (nanos > 0) { timeout++; } wait(timeout); } public final void wait() throws InterruptedException { wait(0); }

wait()方法使得当前线程等待,直到另一个线程调用该对象的notify()方法或者notifyAll()方法,或者其它一些线程中断了当前线程,或者已经过了指定的等待时间。

finalize()方法

protected void finalize() throws Throwable { }

finalize()方法当垃圾收集器确定没有其它对象引用该对象时被调用。子类重写该方法来处理系统资源或者执行其它的清理工作。需要注意的是:finalize()方法被调用的时间并不确定。

总结

Object类是所有类的父类。hashCode()方法默认返回该对象的内存地址。equals()方法默认等同于"=="操作符,即直接比较两个引用所指向的内存地址,内存地址相等表示是同一个对象。

参考

https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
转载请注明原文地址: https://www.6miu.com/read-4932202.html

最新回复(0)