Spec-Zone.ru › OpenJDK 25

Класс Object

java.lang.Object
public class Object
Класс Object является корнем иерархии классов. У каждого класса Object является суперклассом. Все объекты, включая массивы, реализуют методы этого класса.
Начиная с:
1.0
См. также:
  • Class

Краткое описание конструкторов

Конструктор Описание
Object()
Создает новый объект.

Краткое описание методов

Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, является ли другой объект «равным» этому объекту.
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(long timeoutMillis)
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определенного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова 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(java.lang.Object)
  • System.identityHashCode(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.
См. также:
  • hashCode()
  • HashMap

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, также могут выбрасывать это исключение, чтобы указать, что экземпляр нельзя клонировать.
См. также:
  • Cloneable

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()
  • wait()

notifyAll

public final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта. Поток ожидает на мониторе объекта, вызывая один из методов wait.

Пробужденные потоки не смогут продолжить выполнение, пока текущий поток не освободит блокировку этого объекта. Пробужденные потоки будут конкурировать на обычных условиях с любыми другими потоками, которые могут активно пытаться синхронизироваться на этом объекте; например, у пробужденных потоков нет гарантированного преимущества или недостатка при получении блокировки этого объекта следующими.

Этот метод должен вызываться только потоком, владеющим монитором данного объекта. Описание способов, которыми поток может стать владельцем монитора, см. в методе notify.

Выбрасывает:
IllegalMonitorStateException — если текущий поток не владеет монитором этого объекта.
См. также:
  • notify()
  • wait()

wait

public final void wait() throws InterruptedException
Заставляет текущий поток ожидать до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания.

Во всех отношениях этот метод ведет себя так, как если бы был вызван wait(0L, 0). Подробности см. в спецификации метода wait(long, int).

Выбрасывает:
IllegalMonitorStateException — если текущий поток не владеет монитором объекта
InterruptedException — если какой-либо поток прервал текущий поток до начала ожидания или во время ожидания. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается.
См. также:
  • notify()
  • notifyAll()
  • wait(long)
  • wait(long, int)

wait

public final void wait(long timeoutMillis) throws InterruptedException
Заставляет текущий поток ожидать до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет заданное время.

Во всех отношениях этот метод ведет себя так, как если бы был вызван wait(timeoutMillis, 0). Подробности см. в спецификации метода wait(long, int).

Параметры:
timeoutMillis — максимальное время ожидания в миллисекундах
Выбрасывает:
IllegalArgumentException — если timeoutMillis отрицательно
IllegalMonitorStateException — если текущий поток не владеет монитором объекта
InterruptedException — если какой-либо поток прервал текущий поток до начала ожидания или во время ожидания. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается.
См. также:
  • notify()
  • notifyAll()
  • wait()
  • wait(long, int)

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 — если какой-либо поток прервал текущий поток до начала ожидания или во время ожидания. При выбрасывании этого исключения статус прерывания текущего потока сбрасывается.
См. также:
  • notify()
  • notifyAll()
  • wait()
  • wait(long)

finalize

@Deprecated(since="9", forRemoval=true) protected void finalize() throws Throwable
Устарело, будет удалено: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из следующих выпусков. Использование финализации может привести к проблемам с безопасностью, производительностью и надежностью. Обсуждение и альтернативные решения см. в документе JEP 421.

Подклассам, переопределяющим 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 Финализация экземпляров классов
См. также:
  • WeakReference
  • PhantomReference

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры основных понятий, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API