Класс Object
public class Object
Object является корнем иерархии классов. У каждого класса Object является суперклассом. Все объекты, включая массивы, реализуют методы этого класса.- Начиная с:
- 1.0
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Object() |
Создает новый объект. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, является ли другой объект «равным» этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает значение хеш-кода этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определенного промежутка реального времени. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определенного промежутка реального времени. |
Подробное описание конструкторов
Object
public Object()
Подробное описание методов
getClass
public final Class<?> getClass()
Object. Возвращенный объект Class — это объект, блокируемый методами
static synchronized представленного класса. Фактический тип результата — Class<? extends |X|>, где |X| — это стирание статического типа выражения, для которого вызывается getClass. Например, в этом фрагменте кода приведение типа не требуется:
Number n = 0;
Class<? extends Number> c = n.getClass();
- Возвращает:
- Объект
Class, представляющий класс времени выполнения этого объекта. - См. Спецификацию языка Java:
- 15.8.2 Литералы класса
hashCode
public int hashCode()
HashMap. Общий контракт метода hashCode:
- При каждом вызове для одного и того же объекта в ходе выполнения приложения Java метод
hashCodeдолжен неизменно возвращать одно и то же целое число при условии, что информация, используемая при сравненияхequalsобъектов, не изменяется. Это целое число не обязано оставаться неизменным при разных запусках одного приложения. - Если два объекта равны согласно методу
equals, вызов методаhashCodeдля каждого из этих объектов должен давать одинаковый результат — целое число. - Не требуется, чтобы вызов метода
hashCodeдля каждого из двух объектов, не равных согласно методуequals, давал различные результаты — целые числа. Однако программисту следует учитывать, что разные результаты для неравных объектов могут повысить производительность хеш-таблиц.
- Примечание к API:
- Методы
hashиhashCodeклассаObjectsможно использовать для создания простых хеш-кодов. - Требования к реализации:
- Насколько это практически возможно, метод
hashCode, определенный классомObject, возвращает различные целые числа для различных объектов. - Возвращает:
- значение хеш-кода для этого объекта
- См. также:
equals
public boolean equals(Object obj)
Метод equals задает на ненулевых ссылках на объекты отношение эквивалентности:
- Оно рефлексивно: для любого ненулевого значения ссылки
xметодx.equals(x)должен возвращатьtrue. - Оно симметрично: для любых ненулевых значений ссылок
xиyметодx.equals(y)должен возвращатьtrueтогда и только тогда, когдаy.equals(x)возвращаетtrue. - Оно транзитивно: для любых ненулевых значений ссылок
x,yиz, еслиx.equals(y)возвращаетtrueиy.equals(z)возвращаетtrue, тоx.equals(z)должен возвращатьtrue. - Оно согласованно: для любых ненулевых значений ссылок
xиyмногократные вызовыx.equals(y)неизменно возвращаютtrueлибо неизменно возвращаютfalseпри условии, что информация, используемая при сравненияхequalsобъектов, не изменяется. - Для любого ненулевого значения ссылки
xметодx.equals(null)должен возвращатьfalse.
Отношение эквивалентности разбивает рассматриваемые элементы на классы эквивалентности; все элементы одного класса эквивалентности равны друг другу. Элементы класса эквивалентности взаимозаменяемы, по крайней мере в некоторых случаях.
- Примечание к API:
- Как правило, при переопределении этого метода необходимо переопределить и метод
hashCode, чтобы соблюсти общий контракт методаhashCode, согласно которому равные объекты должны иметь одинаковые хеш-коды.Метод
Objects.equalsс двумя аргументами задает отношение эквивалентности для двух ссылок на объекты, которые могут быть равны null. - Требования к реализации:
- Метод
equalsклассаObjectзадает максимально различающее отношение эквивалентности для объектов; то есть для любых ненулевых значений ссылокxиyэтот метод возвращаетtrueтогда и только тогда, когдаxиyссылаются на один и тот же объект (x == yимеет значениеtrue). Иными словами, при отношении эквивалентности ссылок каждый класс эквивалентности содержит только один элемент. - Параметры:
-
obj— ссылка на объект для сравнения. - Возвращает:
-
true, если этот объект совпадает с аргументом obj; в противном случае —false. - См. также:
clone
protected Object clone() throws CloneNotSupportedException
x выражение: будет истинным, а выражение:x.clone() != x
будетx.clone().getClass() == x.getClass()
true, однако это не является безусловным требованием. Хотя обычно: будетx.clone().equals(x)
true, это также не является безусловным требованием. Согласно соглашению, возвращаемый объект следует получать вызовом super.clone. Если класс и все его суперклассы (за исключением Object) следуют этому соглашению, будет выполняться x.clone().getClass() == x.getClass().
Согласно соглашению, объект, возвращаемый этим методом, должен быть независим от исходного объекта (который клонируется). Для обеспечения этой независимости может потребоваться изменить одно или несколько полей объекта, возвращаемого методом super.clone, прежде чем вернуть его. Обычно это означает копирование всех изменяемых объектов, составляющих внутреннюю «глубинную структуру» клонируемого объекта, и замену ссылок на эти объекты ссылками на их копии. Если класс содержит только поля примитивных типов или ссылки на неизменяемые объекты, обычно поля объекта, возвращаемого методом super.clone, изменять не требуется.
- Требования к реализации:
- Метод
cloneклассаObjectвыполняет определенную операцию клонирования. Сначала, если класс этого объекта не реализует интерфейсCloneable, выбрасывается исключениеCloneNotSupportedException. Обратите внимание, что все массивы считаются реализующими интерфейсCloneable, а тип возвращаемого значения методаcloneдля типа массиваT[]—T[], где T — любой ссылочный или примитивный тип. В противном случае этот метод создает новый экземпляр класса данного объекта и инициализирует все его поля точно теми же значениями, что и соответствующие поля этого объекта, как если бы выполнялось присваивание; сами значения полей не клонируются. Таким образом, метод выполняет «поверхностное копирование» этого объекта, а не «глубокое копирование».Сам класс
Objectне реализует интерфейсCloneable, поэтому вызов методаcloneдля объекта классаObjectприведет к выбрасыванию исключения во время выполнения. - Возвращает:
- клон этого экземпляра.
- Выбрасывает:
-
CloneNotSupportedException— если класс объекта не поддерживает интерфейсCloneable. Подклассы, переопределяющие методclone, также могут выбрасывать это исключение, чтобы указать, что экземпляр нельзя клонировать. - См. также:
toString
public String toString()
null.- Примечание к API:
- Как правило, метод
toStringвозвращает строку, которая «текстуально представляет» этот объект. Результат должен быть кратким, но информативным и удобным для чтения. Рекомендуется переопределять этот метод во всех подклассах. Строковое представление не обязательно остается неизменным с течением времени или при разных запусках JVM. - Требования к реализации:
- Метод
toStringклассаObjectвозвращает строку, состоящую из имени класса, экземпляром которого является объект, символа @ `@` и беззнакового шестнадцатеричного представления хеш-кода объекта. Иными словами, этот метод возвращает строку, равную значению:МетодgetClass().getName() + '@' + Integer.toHexString(hashCode())Objects.toIdentityStringвозвращает для объекта строку, равную той, которая была бы возвращена, если бы класс объекта не переопределял методыtoStringиhashCode. - Возвращает:
- строковое представление объекта
notify
public final void notify()
wait. Пробужденный поток не сможет продолжить выполнение, пока текущий поток не освободит блокировку этого объекта. Пробужденный поток будет конкурировать на обычных условиях с любыми другими потоками, которые могут активно пытаться синхронизироваться на этом объекте; например, у пробужденного потока нет гарантированного преимущества или недостатка при получении блокировки этого объекта следующим.
Этот метод должен вызываться только потоком, владеющим монитором данного объекта. Поток становится владельцем монитора объекта одним из трех способов:
- При выполнении синхронизированного метода экземпляра этого объекта.
- При выполнении тела оператора
synchronized, синхронизированного на объекте. - Для объектов типа
Class,— при выполнении статического синхронизированного метода этого класса.
Одновременно монитором объекта может владеть только один поток.
- Выбрасывает:
-
IllegalMonitorStateException— если текущий поток не владеет монитором этого объекта. - См. также:
notifyAll
public final void notifyAll()
wait. Пробужденные потоки не смогут продолжить выполнение, пока текущий поток не освободит блокировку этого объекта. Пробужденные потоки будут конкурировать на обычных условиях с любыми другими потоками, которые могут активно пытаться синхронизироваться на этом объекте; например, у пробужденных потоков нет гарантированного преимущества или недостатка при получении блокировки этого объекта следующими.
Этот метод должен вызываться только потоком, владеющим монитором данного объекта. Описание способов, которыми поток может стать владельцем монитора, см. в методе notify.
- Выбрасывает:
-
IllegalMonitorStateException— если текущий поток не владеет монитором этого объекта. - См. также:
wait
public final void wait() throws InterruptedException
Во всех отношениях этот метод ведет себя так, как если бы был вызван wait(0L, 0). Подробности см. в спецификации метода wait(long, int).
- Выбрасывает:
-
IllegalMonitorStateException— если текущий поток не владеет монитором объекта -
InterruptedException— если какой-либо поток прервал текущий поток до начала ожидания или во время ожидания. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается. - См. также:
wait
public final void wait(long timeoutMillis) throws InterruptedException
Во всех отношениях этот метод ведет себя так, как если бы был вызван wait(timeoutMillis, 0). Подробности см. в спецификации метода wait(long, int).
- Параметры:
-
timeoutMillis— максимальное время ожидания в миллисекундах - Выбрасывает:
-
IllegalArgumentException— еслиtimeoutMillisотрицательно -
IllegalMonitorStateException— если текущий поток не владеет монитором объекта -
InterruptedException— если какой-либо поток прервал текущий поток до начала ожидания или во время ожидания. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается. - См. также:
wait
public final void wait(long timeoutMillis, int nanos) throws InterruptedException
Текущий поток должен владеть блокировкой монитора этого объекта. Описание способов, которыми поток может стать владельцем блокировки монитора, см. в методе notify.
Этот метод помещает текущий поток (далее — T) в множество ожидающих потоков этого объекта, после чего поток освобождает все имеющиеся у него блокировки синхронизации этого объекта. Обратите внимание: освобождаются только блокировки этого объекта; блокировки любых других объектов, на которых текущий поток может быть синхронизирован, сохраняются на время ожидания.
Затем планировщик потоков исключает поток T из планирования, и он остается неактивным до наступления одного из следующих событий:
- Другой поток вызывает для этого объекта метод
notify, и поток T произвольно выбирается для пробуждения. - Другой поток вызывает для этого объекта метод
notifyAll. - Другой поток прерывает поток T.
- Истекает указанное время, с некоторым возможным отклонением. Время в наносекундах задается выражением
1000000 * timeoutMillis + nanos. ЕслиtimeoutMillisиnanosравны нулю, прошедшее время не учитывается, и поток ожидает до пробуждения по одной из других причин. - Поток T пробуждается без видимой причины. (См. ниже.)
Затем поток T удаляется из множества ожидающих потоков этого объекта и снова допускается к планированию. Он на обычных условиях конкурирует с другими потоками за право синхронизироваться на объекте; как только он вновь получает управление объектом, все его блокировки синхронизации этого объекта восстанавливаются до прежнего состояния — то есть до состояния на момент вызова метода wait. Затем поток T возвращается из вызова метода wait. Таким образом, после возврата из метода wait состояние синхронизации объекта и потока T в точности такое же, как на момент вызова метода wait.
Поток может пробудиться без уведомления, прерывания или истечения времени ожидания; это называется ложным пробуждением. Хотя на практике такое происходит редко, приложения должны учитывать эту возможность: проверять условие, которое должно было привести к пробуждению потока, и продолжать ожидание, если условие не выполнено. См. пример ниже.
Дополнительную информацию по этой теме см. в разделе 14.2 «Очереди условий» книги Брайана Гетца и других авторов Java Concurrency in Practice (Addison-Wesley, 2006) или в пункте 81 книги Джошуа Блоха Effective Java, Third Edition (Addison-Wesley, 2018).
Если текущий поток прерван каким-либо потоком до начала ожидания или во время ожидания, выбрасывается InterruptedException. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается. Это исключение выбрасывается только после восстановления состояния блокировки этого объекта, как описано выше.
- Примечание к API:
- Рекомендуется проверять ожидаемое условие в цикле
whileвокруг вызоваwait, как показано в примере ниже. Такой подход, помимо прочего, помогает избежать проблем, связанных с ложными пробуждениями.synchronized (obj) { while ( <condition does not hold and timeout not exceeded> ) { long timeoutMillis = ... ; // recompute timeout values int nanos = ... ; obj.wait(timeoutMillis, nanos); } ... // Perform action appropriate to condition or timeout } - Параметры:
-
timeoutMillis— максимальное время ожидания в миллисекундах -
nanos— дополнительное время в наносекундах в диапазоне от 0 до 999999 включительно - Выбрасывает:
-
IllegalArgumentException— еслиtimeoutMillisотрицательно или значениеnanosвыходит за допустимый диапазон -
IllegalMonitorStateException— если текущий поток не владеет монитором объекта -
InterruptedException— если какой-либо поток прервал текущий поток до начала ожидания или во время ожидания. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается. - См. также:
finalize
@Deprecated(since="9", forRemoval=true) protected void finalize() throws Throwable
Подклассам, переопределяющим finalize для очистки ресурсов, следует использовать альтернативные механизмы очистки и удалить метод finalize. Используйте Cleaner и PhantomReference как более безопасные способы освобождения ресурсов, когда объект становится недостижимым. В качестве альтернативы можно добавить метод close для явного освобождения ресурсов и реализовать AutoCloseable, чтобы обеспечить возможность использования оператора try-with-resources.
Этот метод будет сохранен до тех пор, пока финализаторы не будут удалены из большинства существующего кода.
finalize для освобождения системных ресурсов или выполнения другой очистки. Если виртуальная машина Java работает с отключенной или удаленной финализацией, сборщик мусора никогда не вызовет finalize(). Если финализация включена, сборщик мусора может вызвать finalize лишь спустя неопределенное время.
Общий контракт метода finalize заключается в том, что он вызывается в том случае, когда виртуальная машина Java определила, что ни один поток, который еще не завершил работу, больше не может получить доступ к этому объекту, кроме как в результате действия, выполненного при финализации другого объекта или класса, готового к финализации. Метод finalize может выполнять любые действия, в том числе снова сделать этот объект доступным для других потоков; однако обычное назначение метода finalize — выполнить очистку перед безвозвратным удалением объекта. Например, метод finalize объекта, представляющего соединение ввода-вывода, может явно выполнить операции ввода-вывода для разрыва соединения, прежде чем объект будет окончательно удален.
Метод finalize класса Object не выполняет никаких специальных действий; он просто завершает работу обычным образом. Подклассы Object могут переопределить это определение.
Язык программирования Java не гарантирует, какой поток вызовет метод finalize для конкретного объекта. Однако гарантируется, что поток, вызывающий finalize, не будет удерживать какие-либо видимые пользователю блокировки синхронизации во время вызова finalize. Если метод finalize выбрасывает неперехваченное исключение, оно игнорируется, и финализация этого объекта завершается.
После вызова метода finalize для объекта никаких дальнейших действий не выполняется до тех пор, пока виртуальная машина Java снова не определит, что ни один поток, который еще не завершил работу, больше не может получить доступ к этому объекту, в том числе в результате возможных действий других объектов или классов, готовых к финализации; после этого объект может быть удален.
Виртуальная машина Java вызывает метод finalize для конкретного объекта не более одного раза.
Любое исключение, выброшенное методом finalize, приводит к прекращению финализации этого объекта, но в остальном игнорируется.
- Примечание к API:
- Классы, содержащие ресурсы вне кучи, могут использовать различные способы очистки этих ресурсов. Класс должен гарантировать, что срок жизни каждого экземпляра превышает срок жизни всех содержащихся в нем ресурсов. Метод
Reference.reachabilityFence(Object)можно использовать, чтобы гарантировать достижимость объектов на время использования содержащихся в них ресурсов.Подклассу следует избегать переопределения метода
finalize, если только он не содержит ресурсы вне кучи, которые необходимо очистить до сборки экземпляра. В отличие от конструкторов, вызовы финализаторов не связаны в цепочку автоматически. Если подкласс переопределяетfinalize, он должен явно вызвать финализатор суперкласса. Чтобы исключения не прерывали цепочку вызовов финализаторов, подклассу следует использовать блокtry-finally, гарантирующий, чтоsuper.finalize()будет вызван всегда. Например:@Override protected void finalize() throws Throwable { try { ... // cleanup subclass state } finally { super.finalize(); } } - Выбрасывает:
-
Throwable— исключениеException, выброшенное этим методом - См. Спецификацию языка Java:
- 12.6 Финализация экземпляров классов
- См. также:
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Object.html