我们知道Object基类有如下的方法:
问题一:
为什么唯独clone方法,在源码中要定义成protected呢?其他定义成public的呢?
问题二:
finalize()这个方法好像在项目中很少被用到,但是它能够被定义到基类当中,说明其重要性是很高的,那么这个具体如何使用?在什么情况下,必须使用,非用不可呢??
// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()
// 线程相关
notify()
notifyAll()
wait([long[, int]])
// GC相关
finalize()
これはクラス外からの直接呼び出しを防ぐためです。
リーリーclone
メソッドは、まずCloneable
インターフェースを実装してから、 clone() メソッドを書き直す必要があるためです。この機能を頻繁に使用するわけではありませんが、プロジェクトの経験が十分ではない可能性があります
比較的低レベルのプログラミング経験がある場合 (C 言語など)、メモリの解放、次にリソースの解放などに注意を払うかもしれません。適用とリリースはペアで行う必要があります。ただし、Java の仮想マシンにはガベージ コレクションのメカニズムがあり、メモリ解放の問題を意識したことがないかもしれません。実際、これに特に注意を払う必要はありません。
つまり、多くの人は
构造函数
は知っていても、対応する析构函数
を忘れてしまいます。 (前述したように、Java は自動的にメモリを解放します。)ただし:
java
は、java
によって要求されたメモリを解放します。Java を使用して C、C++、または Windows API を呼び出す場合、これは実際には
JNI(Java Native Interface)
と呼ばれます。Java はここで適用されたメモリを自動的に解放できないため、finalize
並列リリースを使用する必要がある場合があります。簡単に言うと、デストラクターのように機能します。