Методы класса Object
- public final native Class getClass()
- public native int hashCode()
- public boolean equals(Object obj)
Equals класса Object:
public boolean equals(Object obj) {
return (this == obj);
}
Если взглянуть внутрь метода equals класса Integer, то мы увидим:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
http://www.quizful.net/interview/java/equals-equality-difference
- protected native Object clone() throws CloneNotSupportedException
Метод clone() объявлен в классе Object с сигнатурой native, чтобы обеспечить доступ к стандартному механизму "поверхностного копирования" объектов (копируются значения всех полей, включая ссылки на сторонние объекты); он объявлен, как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов.
Интерфейс Cloneable является маркерным (не содержит объявлений методов). Он нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException (это описано в объявлении метода).
Для реализации "глубокого клонирования" (когда вместо копирования ссылок на содержащиеся объекты создаются новые экземпляры) необходимо самим описать весь алгоритм действий в переопределённом методе clone().
Хорошей альтернативой сложной системе клонирования является "копирующий конструктор", принимающий, в качестве параметра, экземпляр собственного класса и создающий на его основе новый экземпляр.public String toString()
http://www.quizful.net/interview/java/clone-and-cloneable
- public final native void notify()
- public final native void notifyAll()
- public final native void wait(long timeout) throws InterruptedException
- public final void wait(long timeout, int nanos) throws InterruptedException
- public final void wait() throws InterruptedException
Важное замечание: методы wait(), notify(), notifyAll() могут быть вызваны только тем потоком, который в данный момент захватил монитор объекта, для которого эти методы вызываются. То есть:
// можно
synchronized(obj) {
obj.wait();
}
// нельзя
synchronized(obj) {
}
obj.wait();
// нельзя
synchronized(obj) {
obj2.wait();
}
То же самое относится к notify() и notifyAll().
http://techarxiv.blogspot.com/2007/11/java-object-wait-notify-notifyall.html
Когда задача вызывает метод yield(), она меняет состояние потока из running в runnable.
При вызове метода sleep(), состояние изменяется с running на waiting/sleeping.
Метод wait(1000), заставляет заснуть текущий поток на одну секунду. Поток может спать менее секунды, если получает notify() или notifyAll().
http://www.quizful.net/interview/java/yield-sleep-wait-difference
- protected void finalize() throws Throwable