java - clone()方法疑问
天蓬老师
天蓬老师 2017-04-18 09:34:52
0
1
608

我们知道Object基类有如下的方法:
问题一:
为什么唯独clone方法,在源码中要定义成protected呢?其他定义成public的呢?
问题二:
finalize()这个方法好像在项目中很少被用到,但是它能够被定义到基类当中,说明其重要性是很高的,那么这个具体如何使用?在什么情况下,必须使用,非用不可呢??



// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()

// 线程相关
notify()
notifyAll()
wait([long[, int]])

// GC相关
finalize()
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(1)
大家讲道理

這個是為了防止被類別外部直接呼叫。

因為clone方法要先要实现Cloneable接口,然後再重寫clone()方法。

public class Test01 implements Cloneable{  
}

這個函數你不常用只是可能沒到足夠的專案經驗

如果你有較為底層的程式設計經驗的時候(如C語言),你可能會比較注意記憶體的釋放,然後資源的釋放等。申請和釋放必須成對出現。然而java中由於虛擬機器的原因,存在垃圾回收機制,你可能從來沒有關注過記憶體的釋放問題。事實上,你也不太需要關注這個。
所以,很多人都知道建構子的同時,卻忘了對應的析構函式。 (上文提到過,Java會自動釋放記憶體。)构造函数的同时,却忘记了对应的析构函数。(上文提到过,Java会自动释放内存。)
但是:
java释放的是java申请的内存。
如果你用java调用了c、C++,或者windows api的时候,其实这叫JNI(Java Native Interface),这里申请的内存,java是无法自动释放的,那么就可能需要通过finalize但是:
java釋放的是java申請的記憶體。

如果你用java呼叫了c、C++,或是windows api的時候,其實這叫JNI(Java Native Interface),這裡申請的內存,java是無法自動釋放的,那麼就可能需要透過finalize來並行釋放。 🎜簡單來講,它就像一個析構函數一樣的作用。 🎜
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板