我们知道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
병렬 릴리스를 사용해야 할 수도 있습니다.간단히 말하면 소멸자처럼 작동합니다.