Object类
Object()
构造函数。
@HotSpotIntrinsicCandidate
public Object() {
}
@HotSpotIntrinsicCandidate属于注解,暂时跳过,之后会总结。
返回此Object的运行时类。 返回的类对象是被表示类的static synchronized方法锁定的对象。 final关键字让继承Object类的子类无法重写该方法。
getClass()
返回此Object的运行时类。 返回的类对象是被表示类的static synchronized方法锁定的对象。 final关键字让继承Object类的子类无法重写该方法。
@HotSpotIntrinsicCandidate
public final native Class<?> getClass();
hashCode()
hash拓展
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
比如要存储100个不同数据,如果存第100个,就要和99个对比,效率比较低,但是如果我提供10个哈希表,分别存储十位从0到9的数,那么先算出第一百个数在哪个哈希表里,然后再去相应的哈希表里找就好了。
@HotSpotIntrinsicCandidate
public native int hashCode();
返回对象的哈希码值。 支持这种方法是为了散列表,如HashMap提供的那样 。不同的对象,哈希值可能相同。
equals()
判断两个类是否相等,很多类都会重写这个方法。可以看出Object类中,比较的是引用是否相等,而不是值是否相等。
public boolean equals(Object obj) {
return (this == obj);
}
clone()
复制一个一样的类出来
@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;
new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。
而clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和原对象相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。
如果一个对象的成员变量有对象,要重写clone方法,比如
class Employee implements Cloneable {
public Object clone() throws CloneNotSupportedException {
Employee cloned = (Employee) super.clone();
cloned.hireDay = (Date)hireDay.clone()
return cloned;
}
}
toString()
类名加@加哈希字符串
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
notify()
唤醒在该对象上等待的单个线程。
@HotSpotIntrinsicCandidate
public final native void notify();
notifyAll()
唤醒该对象上等待的所有线程。
@HotSpotIntrinsicCandidate
public final native void notifyAll();
wait()
当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法。
public final void wait() throws InterruptedException {
wait(0L);
}
wait(long timeoutMillis)
当前线程等待,最多timeoutMillis毫秒。可以被notify()方法或notifyAll()方法唤醒。
public final native void wait(long timeoutMillis) throws InterruptedException;
wait(long timeoutMillis, int nanos)
阻塞当前线程 timeoutMillis毫秒,nanos(0-999999)纳秒 。 可以被notify()方法或notifyAll()方法唤醒。但是从源码可以看出,当纳秒大于零的时候,相当于阻塞了毫秒数加一。
public final void wait(long timeoutMillis, int nanos) throws InterruptedException {
if (timeoutMillis < 0) {
throw new IllegalArgumentException("timeoutMillis value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0 && timeoutMillis < Long.MAX_VALUE) {
timeoutMillis++;
}
wait(timeoutMillis);
}
finalize()
当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。
@Deprecated(since="9"