Object
java所有类的根类 Object
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
/**
* 返回对象的字节码对象
*/
public final native Class<?> getClass();
/**
* 返回对象的哈希码值。根据此哈希码值散列到哈希表
* {@link java.util.HashMap}。
* 每次在同一对象上多次调用hashCode方法,必须始终返回相同的整数,
* 在合理可行的范围内,由类Object为不同的对象返回不同的整数。
*/
public native int hashCode();
/**
* 表示其他某个对象是否“等于”该对象。
*其中规定相等的对象必须具有相等的哈希码。
*/
public boolean equals(Object obj) {
return (this == obj);
}
/**
* 创建并返回此对象的副本
* 抛出 CloneNotSupportedException--> 如果对象的类没有实现Cloneable接口。
* 子类覆盖clone方法的方法也可以抛出此异常以表示实例无法被克隆。
*/
protected native Object clone() throws CloneNotSupportedException;
/**
*返回对象的字符串表示形式。
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
/**
* 唤醒在此对象监视器上等待的单个线程。 如果任何线程在此对象上等待,它们中的一个被选择为被唤醒。
* 唤醒的线程将无法继续进行,直到当前线程放弃此对象的锁。
* 被唤醒的线程将积极与在对象上进行同步的任何其他线程竞争;
* 一次只能有一个线程拥有对象的监视器。
* 抛出 IllegalMonitorStateException 如果当前线程不是此对象的监视器的所有者。
*/
public final native void notify();
/**
* 唤醒正在该对象的监视器上等待的所有线程。
* 一个线程通过调用对象的wait方法从而在对象的监视器上等待
* 被唤醒的线程 要等到当前线程放弃对该对象的锁定。
* 此方法只能由拥有者的线程调用
* @throws IllegalMonitorStateException 如果当前线程不是此对象的监视器的所有者。
*/
public final native void notifyAll();
/**
* 使当前的线程等待直到其他线程调用Object.notify()方法或Object.notifyAll()方法用于此目的,或者在指定的时间量已过去。
* 当前线程必须拥有该对象的监视器。
* @param timeout等待的最长时间(以毫秒为单位)。
* @throws IllegalArgumentException 如果超时值为负数
* @throws IllegalMonitorStateException 如果当前线程不是对象监视器的所有者
*。
* @throws InterruptedException 如果任何线程中断了当前线程
* 在以下情况下清除当前线程的状态抛出此异常
* @see java.lang.Object#notify()
* @see java.lang.Object#notifyAll()
*/
public final native void wait(long timeout) throws InterruptedException;
/**
* 导致当前线程等待,直到另一个线程调用notify方法或者notifyAll方法
* 此方法只能由拥有者的线程调用
*
* @param timeout 等待的最长时间(以毫秒为单位)。
* @param nanos 附加时间,以纳秒为单位
* 0-999999.
* @throws IllegalArgumentException 如果超时值为负数 或 nanos的值不在0-999999范围内。
*
*
* @throws IllegalMonitorStateException 如果当前线程不是
*此对象的监视器的所有者。
* @throws InterruptedException 如果任何线程中断了当前线程
*/
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
public final void wait() throws InterruptedException {
wait(0);
}
/**
* 垃圾回收器回收不存在被引用的对象时,会触发该方法。
* 子类覆盖finalize方法,以配置系统资源或执行其他清理。
*/
protected void finalize() throws Throwable { }
}