Object 是所有类的父类,任何类都默认继承 Object。Object 类到底实现了哪些方法?
(1)clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
(2)getClass方法
final方法,获得运行时类型。
(3)toString方法
该方法用得比较多,一般子类都有覆盖。
(4)finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
(5)equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
(6)hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
(7)wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
(8)notify方法
该方法唤醒在该对象上等待的某个线程。
(9)notifyAll方法
该方法唤醒在该对象上等待的所有线程。
代码语言:javascript复制//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package java.lang;
public class ObjectTest {
/**
* 构造方法
*/
public Object() {
}
/**
* 为了使JVM发现本机功能,他们被一定的方式命名。
* 例如,对于java.lang.Object.registerNatives,
* 对应的C函数命名为Java_java_lang_Object_registerNatives。
*
* 通过使用registerNatives(或者更确切地说,JNI函数RegisterNatives),可以命名任何你想要你的C函数。
*/
private static native void registerNatives();
/**
* final方法,用于获得运行时的类型。
* 该方法返回的是此Object对象的类对象/运行时类对象Class。效果与Object.class相同。
*
* Object obj = new Object();
* obj.getClass() == Object.class
*
*/
public final native Class<?> getClass();
/**
* 该方法用来返回其所在对象的物理地址(哈希码值),
* 常会和equals方法同时重写,确保相等的两个对象拥有相等的hashCode。
*/
public native int hashCode();
/**
* equals用来比较两个对象的内容是否相等。
* 默认情况下(继承自Object类),equals和==是一样的,除非被覆写(override)了。
*/
public boolean equals(Object var1) {
return this == var1;
}
/**
* clone()函数的用途是用来另存一个当前存在的对象。
* 只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
*/
protected native Object clone() throws CloneNotSupportedException;
/**
* toString()方法返回该对象的字符串表示,这个方法没什么可说的。
* 一般会被覆写
*/
public String toString() {
return this.getClass().getName() "@" Integer.toHexString(this.hashCode());
}
/**
* 唤醒在此对象监视器上等待的单个线程。(
*/
public final native void notify();
/**
* 唤醒在此对象监视器上等待的所有线程。
*/
public final native void notifyAll();
/**
* 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。
*/
public final native void wait(long var1) throws InterruptedException;
/**
* 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,
* 或者其他某个线程中断当前线程,或者已超过某个实际时间量。
*/
public final void wait(long var1, int var3) throws InterruptedException {
if (var1 < 0L) {
throw new IllegalArgumentException("timeout value is negative");
} else if (var3 >= 0 && var3 <= 999999) {
if (var3 > 0) {
var1;
}
this.wait(var1);
} else {
throw new IllegalArgumentException("nanosecond timeout value out of range");
}
}
/**
* 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
*/
public final void wait() throws InterruptedException {
this.wait(0L);
}
/**
* 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
*/
protected void finalize() throws Throwable {
}
static {
registerNatives();
}
}
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://cloud.tencent.com/developer/article/2020518