常见方法最好知道
public final native Class<?> getClass();
- 是个native方法,用于返回当前对象的Class对象;
- 由于final修饰,所以不可以被重写。
public boolean equals(Object obj);
- 用于比较2个对象的内存地址是否相等;
- String类对该方法进行了重写,用来比较字符串的值是否相等。
protected native Object clone() throws CloneNotSupportedException ;
- 是个本地方法,clone():用来创建并返回当前对象的一份拷贝;
- 一般情况下,拷贝的对象和原对象内容完全相同,只是内存地址不一样;
- 对于任何对象x,表达式
x.clone() != x 为true
; x.clone().getClass() == x.getClass() 为true
- Object本身没有实现Cloneable接口,所以不重写clone方法并且进行调用时会发生
CloneNotSupportedException
异常 - 重写的时候,如果该对象的成员含有成员对象的话,如果仅仅是调用
super.clone
,拷贝的对象中,里面的成员对象并没有被拷贝到,还是共用同一个成员对象,我们一般需要进行深度克隆。
public String toString() ;
- 返回类的名字@实例的哈希码的16进制的字符串;
- 建议Object所有子类都重写这个方法
public final native void notify();
- native方法,并且不能被重写;
- 唤醒一个在次对象监视器上等待的线程,如果有多个线程在等待只会唤醒一个。
public final native void notifyAll();
- native方法,不能被重写;
- 与notify一样,唯一的区别是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
public final native void wait(long timeout) throws InterruptedException;
public final void wait() throws InterruptedException ;
public final void wait(long timeout, int nanos) throws InterruptedException ;
- native方法,不能被重写;
wait()
方法用来暂停线程,一般采用wait
和notify
这两个方法互相配合的方式,来实现线程的等待/唤醒机制;- 没有参数表示一直等待,有参数
timeout
的表示等到一定的时间,就自动不再等待了; nanos
这个参数,表示额外要等待的时间,timeout
的单位是毫秒,nanos
的单位是纳秒,为了更加精确的控制时间。
protected void finalize() throws Throwable { };
- 实例被垃圾回收器回收的时候触发该方法,主要用来对象要被回收时,需要做的一些后续处理;
- 任何一个对象的
finalize
方法都只会被系统自动调用一次。