Object类的一些常见方法总结

常见方法最好知道
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()方法用来暂停线程,一般采用waitnotify这两个方法互相配合的方式,来实现线程的等待/唤醒机制;
  • 没有参数表示一直等待,有参数timeout的表示等到一定的时间,就自动不再等待了;
  • nanos这个参数,表示额外要等待的时间,timeout的单位是毫秒,nanos的单位是纳秒,为了更加精确的控制时间。
protected void finalize() throws Throwable { };
  • 实例被垃圾回收器回收的时候触发该方法,主要用来对象要被回收时,需要做的一些后续处理;
  • 任何一个对象的finalize方法都只会被系统自动调用一次。

你可能感兴趣的:(Java)