Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | Индекс

20.1 Класс java.lang.Object

Класс Object единственный корень иерархии классов. Все объекты, включая массивы, реализуют методы этого класса.

public class Object {
	public final Class getClass();
	public String toString();
	public boolean equals(Object obj);
	public int hashCode();
	protected Object clone()
		throws CloneNotSupportedException;
	public final void wait()
throws IllegalMonitorStateException,
InterruptedException; public final void wait(long millis)
throws IllegalMonitorStateException,
InterruptedException; public final void wait(long millis, int nanos)
throws IllegalMonitorStateException, InterruptedException; public final void notify() throws IllegalMonitorStateException; public final void notifyAll() throws IllegalMonitorStateException; protected void finalize()
throws Throwable; }

20.1.1 public final Class getClass()

Этот метод возвращает ссылку на уникальный объект типа Class (§20.3), который представляет класс этого объекта. Это Class объект является объектом, который блокируется static synchronized методы представленного класса.

20.1.2 public String toString()

Общий контракт toString это, это возвращает строку, которая "дословно представляет" этот объект. Идея состоит в том, чтобы обеспечить краткое, но информативное представление, которое будет полезно для человека, читающего ее.

toString метод определяется классом Object возвращает строку, состоящую из имени класса, которого объект является экземпляром, рекламой в символе '@', и шестнадцатеричное представление без знака хэш-кода объекта. Другими словами этот метод возвращает строку, равную значению:

getClass().getName() + '@' + Integer.toHexString(hashCode())
Переопределенный Class (§20.3), Boolean (§20.4), Character (§20.5), Integer (§20.7), Long (§20.8), Float (§20.9), Double (§20.10), String (§20.12), StringBuffer (§20.13), Thread (§20.20), ThreadGroup (§20.21), Throwable (§20.22.4), и Bitset (§21.2).

20.1.3 public boolean equals(Object obj)

Этот метод указывает, " ли некоторый другой объект равен" этому.

Общий контракт equals это, это реализует отношение эквивалентности:

equals метод определяется классом Object реализует самое отличительное отношение эквивалентности на объектах; то есть, для любых ссылочных значений x и y, ((Object)x).equals(y) возвраты true если и только если x и y обратитесь к тому же самому объекту.

Переопределенный Boolean (§20.4), Character (§20.5), Integer (§20.7), Long (§20.8), Float (§20.9), Double (§20.10), String (§20.12), и Bitset (§21.2).

20.1.4 public int hashCode()

Этот метод поддерживается преимущественно в пользу хэш-таблиц, таких как обеспеченные классом библиотеки Java java.util.Hashtable (§21.5).

Общий контракт hashCode следующие:

Столько, сколько разумно практично, hashCode метод определяется классом Object действительно возвращает отличные целые числа для отличных объектов. (Это обычно реализуется, преобразовывая внутренний адрес объекта в целое число, но этот метод реализации не требуется языком Java.)

Переопределенный Boolean (§20.4), Character (§20.5), Integer (§20.7), Long (§20.8), Float (§20.9), Double (§20.10), String (§20.12), и Bitset (§21.2).

20.1.5 protected Object clone()
throws CloneNotSupportedException

Общий контракт клона - то, что это создает и возвращает копию этого объекта. Точное значение "копии" может зависеть от класса объекта. Общее намерение состоит в том что для любого объекта x, выражение:

x.clone() != x
будет true, и что выражение:

x.clone.getClass() == x.getClass()
будет true, но они не абсолютные требования. В то время как это обычно имеет место что:

x.clone.equals(x)
будет true, это не абсолютное требование. Копирование объекта будет обычно влечь за собой создание нового экземпляра его класса, но это также может потребовать копирования внутренних структур данных также.

Метод clone для класса Object выполняет определенную работу клонирования. Во-первых, если класс этого объекта не реализует интерфейс Cloneable, тогда a CloneNotSupportedException бросается. Отметьте, что все массивы, как полагают, реализуют интерфейс Cloneable. Иначе, этот метод создает новый экземпляр класса этого объекта и инициализирует все его поля с точно содержанием соответствующих полей этого объекта, как будто присвоением; содержание полей самостоятельно не клонируется. Таким образом этот метод выполняет "мелкую копию" этого объекта, не "глубокой копии" работа.

Класс Object самостоятельно не реализует интерфейс Cloneable, так вызов clone метод на объекте, класс которого Object приведет к выдаче исключения во время выполнения. clone метод реализуется классом Object как удобная, общая утилита для подклассов, которые реализуют интерфейс Cloneable, возможно также переопределение clone метод, когда определение переопределения может сослаться на это служебное определение вызовом:

super.clone()

20.1.6 public final void wait()
throws IllegalMonitorStateException, InterruptedException

Этот метод заставляет текущий поток ожидать, пока некоторый другой поток не вызывает notify метод (§20.1.9) или notifyAll метод (§20.1.10) для этого объекта.

Другими словами этот метод ведет себя точно, как будто он просто выполняет вызов wait(0) (§20.1.7).

20.1.7 public final void wait(long millis)
throws IllegalMonitorStateException, InterruptedException

Этот метод заставляет текущий поток ожидать, пока любой некоторый другой поток не вызывает notify метод (§20.1.9) или notifyAll метод (§20.1.10) для этого объекта, или определенного количества реального времени протек.

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

Этот метод вызывает текущий поток (вызовите это T) занять место в ожидать наборе (§17.14) для этого объекта и затем оставить любого и все требования синхронизации на этом объекте. Поток T становится отключенным в целях планирования потоков и бездействует, пока одна из четырех вещей не происходит:

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

Если текущий поток прерывается (§20.20.31) другим потоком, в то время как это ожидает, то InterruptedException бросается. Это исключение не выдается, пока состояние блокировки этого объекта не было восстановлено как описано выше.

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

20.1.8 public final void wait(long millis, int nanos)
throws IllegalMonitorStateException, InterruptedException

Этот метод заставляет текущий поток ожидать, пока любой некоторый другой поток не вызывает notify метод (§20.1.9) или notifyAll метод (§20.1.10) для этого объекта, или некоторого другого потока прерывает текущий поток, или определенное количество реального времени протекло.

Количеством реального времени, измеренного в наносекундах, дают:

1000000*millis+nanos
Во всех других отношениях этот метод делает ту же самую вещь как метод wait из одного параметра (§20.1.7). В частности wait(0, 0) означает ту же самую вещь как wait(0).

20.1.9 public final void notify()
throws IllegalMonitorStateException

Если какие-либо потоки ожидают (§20.1.7) на этом объекте, один из них выбирается, чтобы быть пробужденным. Выбор произволен и на усмотрение реализации.

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

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

20.1.10 public final void notifyAll()
throws IllegalMonitorStateException

Все потоки, ожидая (§20.1.7) на этом объекте пробуждаются.

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

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

20.1.11 protected void finalize() throws Throwable

Общий контракт finalize это, это вызывается, если и когда виртуальная машина Java решила, что больше нет, любой подразумевает, который к этому объекту может получить доступ любой поток, который еще не умер (§12.7), за исключением результата мер, предпринятых завершением некоторого другого объекта или класса, который готов быть завершенным. finalize метод может предпринять любые меры, включая то, чтобы делать этот объект, доступный снова для других потоков; обычная цель finalize, однако, должен выполнить действия уборки прежде, чем объект будет безвозвратно отброшен. Например, finalize метод для объекта, который представляет соединение ввода/вывода, мог бы выполнить явные транзакции ввода-вывода, чтобы повредить соединение прежде, чем объект будет постоянно отброшен.

finalize метод класса Object не выполняет специального действия; это просто обычно возвращается. Подклассы Object может переопределить это определение.

Java не гарантирует, который поток вызовет finalize метод для любого данного объекта. Гарантируется, однако, что поток, который вызывает finalize не будет содержать видимых пользователем блокировок синхронизации когда finalize вызывается. Если непойманное исключение выдается finalize метод, исключение игнорируется, и завершение того объекта завершается.

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

finalize метод никогда не вызывается не раз виртуальной машиной Java ни для какого данного объекта.

20.2 Интерфейс java.lang.Cloneable

Cloneable интерфейс должен быть реализован любым классом, который предназначается, чтобы поддерживать или переопределить метод clone (§20.1.5).

public interface Cloneable { }

Интерфейс Cloneable не объявляет методов.


Содержание | Предыдущий | Следующий | Индекс

Спецификация языка Java (HTML, сгенерированный Блинчиком "сюзет" Pelouch 24 февраля 1998)
Авторское право © Sun Microsystems, Inc 1996 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com

free hit counter