我们知道Object基类有如下的方法:
问题一:
为什么唯独clone方法,在源码中要定义成protected呢?其他定义成public的呢?
问题二:
finalize()这个方法好像在项目中很少被用到,但是它能够被定义到基类当中,说明其重要性是很高的,那么这个具体如何使用?在什么情况下,必须使用,非用不可呢??
// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()
// 线程相关
notify()
notifyAll()
wait([long[, int]])
// GC相关
finalize()
Cela permet d'éviter les appels directs provenant de l'extérieur de la classe.
Parce que la méthode
clone
doit d'abord implémenter l'interfaceCloneable
puis réécrire la méthode clone().Vous n'utilisez pas souvent cette fonction mais vous n'avez peut-être pas suffisamment d'expérience en projet
Si vous avez une expérience en programmation de niveau relativement faible (comme le langage C), vous pouvez accorder plus d'attention à la libération de mémoire, puis à la libération de ressources, etc. L’application et la publication doivent se produire par paires. Cependant, en raison de la machine virtuelle Java, il existe un mécanisme de récupération de place et vous n'avez peut-être jamais prêté attention au problème de libération de mémoire. En fait, vous n’avez pas vraiment besoin d’y prêter attention.
Donc, alors que beaucoup de gens connaissent
构造函数
, ils oublient le析构函数
correspondant. (Comme mentionné ci-dessus, Java libérera automatiquement de la mémoire.)Mais :
java
libère la mémoire demandée parjava
.Si vous utilisez Java pour appeler l'API C, C++ ou Windows, cela s'appelle en fait
JNI(Java Native Interface)
Java ne peut pas libérer automatiquement la mémoire appliquée ici, vous devrez donc peut-être utiliserfinalize
Version parallèle.Pour faire simple, cela fonctionne comme un destructeur.