Java上帝类(Object类)源码总结(2)

来源:互联网 发布:表白app源码下载 编辑:程序博客网 时间:2024/05/16 00:45

protected native Object clone() throwsCloneNotSupportedException;

克隆(拷贝)方法,Object类实现的是浅克隆,这里要提下浅克隆(浅拷贝)和深克隆(深拷贝),用一句最简单的描述:当对象a1的成员包含了对B类实例对象的引用b1时,这时如果要克隆一份a1对象给a2,只克隆对象a1的基本类型成员和引用b1时,这时a1和a2共用b1引用指向的对象,这时这就叫浅克隆(浅拷贝),如果不仅克隆了上面的内容,而且还克隆了一份b1引用指向的对象,这时a1和a2分别拥有自己的一份b1对象,这就叫深克隆(深拷贝)。

 

public String toString() {

        return getClass().getName() +"@" + Integer.toHexString(hashCode());

    }

Object类返回的是 类名@内存地址,子类可以重写该方法,比如String

public String toString() {

        return this;

}

返回的就是该String对象本身。

 

public final native void notify();

随即唤醒一个因为调用该对象的wait()方法而阻塞的线程。前提是获取到了该对象的锁才能使用,说白了这个方法就是在synchronized同步语句块中执行的。

 

public final native void notifyAll();

随即唤醒所有因为调用该对象的wait()方法而阻塞的线程。

 

public final native void wait(long timeout)throws InterruptedException;

调用该方法阻塞了当前线程,并且释放对象锁,释放cpu资源,进入等待池中等待唤醒,如果在参数时间后没受到notify唤醒,则自动唤醒,并挪到锁等待池中,获取到锁资源和cpu资源后执行。

 

public final void wait(long timeout, intnanos) throws InterruptedException

这个方法跟上面的方法内容基本一致,只是时间的颗粒度细到了纳秒,大概意思是如果nanos参数大于0的话,timeout加一,再调用wait(timeout),可能是计算机实现不了纳秒级别的时间粒度,实际上还是以毫秒为单位,估计是为以后硬件进步后流了一个超前的接口。

 

public final void wait() throws InterruptedException{

       wait(0);

    }

没带时间参数的wait方法,表示一直阻塞直到被notify唤醒。

 

protected void finalize() throws Throwable{ }

在虚拟机的垃圾回收线程GC回收该对象的堆内存前默认调用finalize()方法,相当于C++中的析构方法。需要注意一点的就是,这个方法的默认调用时机和GC一样是由虚拟机决定的,如果是要求及时调用的话可以手工调用,当然GC回收前还会调用一次。

0 0
原创粉丝点击