Class {@code Object} is the root of the class hierarchy.
Every class has {@code Object} as a superclass. All objects,
including arrays, implement the methods of this class.
翻译:
类 {@code Object} 是类层次结构的根。
每个类都有 {@code Object} 作为超类。
所有对象,包括数组,都要实现这个类的方法。
下面我们来看一下Object类中有哪些方法,以及这些方法的作用:
private static native void registerNatives();static {registerNatives();}
上面这段代码是当类加载时执行的静态代码块,进行本地方法注册。
Java程序有两种方法:java方法和本地方法
registerNatives()方法的作用就是将Java代码中定义的本地方法和本地方法的实现连接起来,当Java程序调用一个本地方法时,就可以直接执行本地方法代码,不需要JVM再去定位并连接。
public final native Class> getClass();
class是一个类的属性,能获取该类编译时的类对象,而getClass()是一个类的方法,它是获取该类运行的类对象。
public native int hashCode();
在Java 中, hashCode() 方法的主要作用就是为了配合哈希表使用的。 哈希表(Hash Table),也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点就是可以快速实现查找、插入和删除。
public boolean equals(Object obj) {return (this == obj);}
equals() 的作用是用来判断两个对象是否相等。 既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相等。
protected native Object clone() throws CloneNotSupportedException;
Object clone() 方法用于创建并返回一个对象的拷贝。
clone 方法是浅拷贝,对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}
toString() 方法用于返回对象的字符串表示形式。
public final native void notify();
notify() 方法用于唤醒一个在此对象监视器上等待的线程。 如果所有的线程都在此对象上等待,那么只会选择一个线程,选择是任意性的,并在对实现做出决定时发生。 一个线程在对象监视器上等待可以调用wait() 方法。 notify() 方法只能被作为此对象监视器的所有者的线程来调用。
public final native void notifyAll();
notifyAll() 方法用于唤醒在该对象上等待的所有线程。 notifyAll() 方法跟notify() 方法一样,区别在于notifyAll() 方法唤醒在此对象监视器上等待的所有线程,notify() 方法是一个线程。
public final native void wait(long timeout) throws InterruptedException;
wait() 方法让当前线程进入等待状态。 直到其他线程调用此对象的notify() 方法或notifyAll() 方法。 当前线程必须是此对象的监视器所有者,否则还是会发生IllegalMonitorStateException 异常。
protected void finalize() throws Throwable { }
finalize() 方法用于实例被垃圾回收器回收的时触发的操作。 当GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法。