我们知道Object基类有如下的方法:
问题一:
为什么唯独clone方法,在源码中要定义成protected呢?其他定义成public的呢?
问题二:
finalize()这个方法好像在项目中很少被用到,但是它能够被定义到基类当中,说明其重要性是很高的,那么这个具体如何使用?在什么情况下,必须使用,非用不可呢??
// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()
// 线程相关
notify()
notifyAll()
wait([long[, int]])
// GC相关
finalize()
大家讲道理2017-04-18 09:36:52
clone
메서드는 먼저 Cloneable
인터페이스를 구현한 다음 clone() 메서드를 다시 작성해야 하기 때문입니다.
비교적으로 낮은 수준의 프로그래밍 경험(예: C 언어)이 있는 경우 메모리 릴리스, 그 다음 리소스 릴리스 등에 더 주의를 기울일 수 있습니다. 애플리케이션과 릴리스는 쌍으로 이루어져야 합니다. 그러나 Java의 가상 머신으로 인해 가비지 수집 메커니즘이 있으므로 메모리 릴리스 문제에 전혀 관심을 두지 않았을 수도 있습니다. 사실 이 부분은 별로 주의를 기울일 필요가 없습니다.
그래서 많은 사람들이 构造函数
을 알면서도 해당 析构函数
을 잊어버리고 있는 경우가 많습니다. (위에서 언급했듯이 Java는 자동으로 메모리를 해제합니다.)
그러나 java
는 java
에서 요청한 메모리를 해제합니다.
Java를 사용하여 c, C++, Windows API를 호출하는 경우 이를 실제로 JNI(Java Native Interface)
이라고 합니다. Java는 여기에 적용된 메모리를 자동으로 해제할 수 없으므로 finalize
병렬 릴리스를 사용해야 할 수도 있습니다.
간단히 말하면 소멸자처럼 작동합니다.