2019-04-25 java.lang.Object
2019-04-25 本文已影响0人
轩判
Object 对象 所有类的基类
java是单根继承语言,Object就是所有类的基类或根类,所有的类都继承自Object
构成
主要由是一个方法构成,其中包含部分 final native的方法
最开始又一个native方法registerNatives native修饰的方法为提供外部实现的方法,方法调用时真正运行的是外部实现,并且通过一个静态初始化块初始化了该方法
private static native void registerNatives();
static {
registerNatives();
}
然后同样是native修饰的getClass方法和hashCode方法
//返回当前运行时对象的Class对象
public final native Class<?> getClass();
//该方法返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。
public native int hashCode();
判断是否是同一个对象 地址比较
//比较两个对象是否相等。Object类的默认实现,即比较2个对象的内存地址是否相等:
public boolean equals(Object obj) {
return (this == obj);
}
又是一个native修饰的方法clone
//创建并返回当前对象的一份拷贝
protected native Object clone() throws CloneNotSupportedException;
对象以字符串方式表示 toString方法,默认该方法是反馈类名称@分隔然后加上Object的hashCode值的16进制表示
//Object对象的默认实现,即输出类的名字@实例的哈希码的16进制:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
native方法notify和notifyAll和wait
//唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果所有的线程都在此对象上等待,那么只会选择一个线程。选择是任意性的,并在对实现做出决定时发生。一个线程在对象监视器上等待可以调用wait方法。
public final native void notify();
//跟notify一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
public final native void notifyAll();
//wait方法会让当前线程等待直到另外一个线程调用对象的notify或notifyAll方法,或者超过参数设置的timeout超时时间。
public final native void wait(long timeout) throws InterruptedException;
然后是两个public方法wait
//跟wait(long timeout)方法类似,多了一个nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。 所以超时的时间还需要加上nanos毫秒。
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);
}
//跟wait(long timeout)方法类似
public final void wait() throws InterruptedException {
wait(0);
}
一个protected的finalize方法
//该方法的作用是实例被垃圾回收器回收的时候触发的操作,就好比 “死前的最后一波挣扎”。
protected void finalize() throws Throwable { }