Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Класс object в java. Основные поля и методы.



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

Класс Object определяет методы, которые доступны в любом объекте.

Методы getClass (), notify (), notifyAll () и wait () объявлены как final. Остальные методы можно переопределять.

В составе класса Object определена целая группа методов, которые наследуются всеми производными классами. Эти методы можно условно разделить на две категории – прикладные методы и методы, обеспечивающие поддержку многопоточных вычислений.

· public boolean equals(Object obj) Проверяет, равны ли текущий объект и объект, на который указывает ссылка obj, переданная в качестве параметра, и возвращает значение true, если факт равенства установлен, и false – в противном случае. Если необходимо проверить, указывают ли две ссылки на один и тот же объект, следует применять операторы == или! =. Метод equals сопоставляет содержимое объектов. В исходной реализации метода equals, предусмотренной в классе Object, предполагается, что объект равен только самому себе, Т.е. удовлетворяет условию this == obj.

· public int hashCode() Возвращает значение хеш-кода (hash code) текущего объекта. Каждый объект обладает собственным хеш-кодом, который находит применение в хеш-таблицах. В реализации по умолчанию предусмотрен возврат значения, которое, как правило, различно для разных объектов. Значение кода используется в процессе сохранения объекта в одной из хеш-коллекций.

· protected Object clone() throws CloneNotSupportedException Возвращает клон текущего объекта. Клон - это новый объект, являющийся копией текущего.

· public final Class getClass() Возвращает объект типа Class, который представляет информацию о классе текущего объекта на этапе выполнения программы.

· protected void finalize() throws Throwable Позволяет выполнить необходимые операции очистки состояния объекта до того момента, когда объект будет уничтожен в процессе сборки мусора.

· public String toString() Возвращает строковое представление объекта. Метод tоString вызывается неявно, когда ссылка на объект употребляется в качестве операнда в контексте выражений конкатенации строк с помощью оператора +. Версия метода toString, реализованная в классе Object, по умолчанию возвращает строку, содержащую наименование класса, которому принадлежит текущий объект, символ @ и шестнадцатеричное представление хеш-кода объекта.

· void notify() Возобновляет единичный поток, который ожидает на объектном мониторе.

· void notifyAll() Возобновляет все потоки, которые ожидают на объектном мониторе.

· void wait() void wait(long timeout) void wait(long timeout, int nanos) Остановка текущего потока пока другой поток не вызовет notify() или notifyAll метод для этого объекта

Оба метода, hashcode и equals, должны быть переопределены, если необходимо придать понятию равенства объектов иной смысл, отличный от того, который предлагается классом Object. По умолчанию считается, что любые два различных объекта " не равны", Т.е. метод equals возвращает значение false, и их хеш-коды, как правило, различны.

Если версия метода equals, реализованная в некоем классе, допускает " равенство" двух различных объектов, их хеш-коды, возвращаемые соответствующими вариантами метода hashCode, также должны быть равны. Дело в том, что механизм хеширования тесно связан с методом еquаls, возвращающим true, если в хеш-таблице найден ключ с заданным значением. Например, в классе String метод equals переопределен таким образом, что он возвращает true, если оба сопоставляемых объекта String обладают одинаковым содержимым. В классе String также переопределен и метод hashcode – он возвращает значение, непосредственно зависящее от содержимого строки, так что две одинаковые строки неизбежно будут иметь один и тот же хеш-код.

Термин тождественность (identity) применяется в отношении равенства ссылок на объекты: если две ссылки тождественны, Т.е. указывают на один объект, оператор сравнения == возвратит значение true. Термин равнозначность (equivalence) используется для выражения факта равенства значений - метод equals возвращает true, если значения совпадают (причем ссылки на них могут быть и не тождественны). Поэтому мы вправе сказать, что реализация метода equals в классе Object, предлагаемая по умолчанию, предусматривает совпадение понятий тождественности и равнозначности. Класс, в котором понятие равенства расширяется, способен " производить" объекты – не тождественные, но равнозначные – посредством переопределения метода equals. Таким образом, чтобы тот возвращал true, принимая во внимание внутреннее состояние объектов, а не возможность совпадения ссылок на них.

В некоторых типах хеш-таблиц при поиске ключей учитывается тождественность ссылок на объекты, а не равнозначность самих объектов. Если вам необходимо создать подобную таблицу-класс, следует позаботиться о том, чтобы хеш-коды соответствовали свойству тождественности объектов, а не их состоянию. Метод System.identityHashCode возвращает то же значение, которое мог бы возвратить метод hashCode класса Object, если этот метод в производном классе не переопределен.

Этот класс определяет основное состояние и поведение, которое должны иметь все объекты, например, способности сравнивать один объект с другим, преобразовывать к строке и возвращать объектную ссылку. Класс Object включен в пакет java. Lang. Конструктор: Object().


 

БИЛЕТ №15

Работа со стандартными потоками

Приложению Java доступны три стандратных потока, которые всегда открыты: стандартный поток ввода, стандартный поток вывода и стандартный поток вывода сообщений об ошибках.

Все перечисленные выше потоки определены в классе System как статические поля с именами, соответственно, in, out и err:

 

public final class java.lang.System

extends java.lang.Object

{

public static PrintStream err;

public static InputStream in;

public static PrintStream out;

...

}

Заметим, что стандратные потоки, как правило, не используются аплетами, так как навигаторы Internet общаются с пользователем через окно аплета и извещения от мыши и клавиатуры, а не через консоль.

Стандартный поток ввода

Стандартный поток ввода in определен как статический объект класса InputStream, который содержит только простейшие методы для ввода данных. Нужнее всего вам будет метод read:

 

public int read(byte b[]);

Этот метод читает данные из потока в массив, ссылка на который передается через единственный параметр. Количество считанных данных определяется размером массива, то есть значением b.length.

Метод read возвращает количество прочитанных байт данных или -1, если достигнут конец потока. При возникновении ошибок создается исключение IOException, обработку которого необходимо предусмотреть.

Стандартный поток вывода

Стандартный поток вывода out создан на базе класса PrintStream, предназначенного, как мы это отмечали раньше, для форматированного вывода данных различного типа с целью их визуального отображения в виде текстовой строки.

Для работы со стандартным потоком вывода вы будете использовать главным образом методы print и println, хотя метод write также доступен.

В классе PrintStream определено несколько реализаций метода print с параметрами различных типов:

 

public void print(boolean b);

public void print(char c);

public void print(char s[]);

public void print(double d);

public void print(float f);

public void print(int i);

public void print(long l);

public void print(Object obj);

public void print(String s);

Как видите, вы можете записать в стандартный поток вывода текстовое представление данных различного типа, в том числе и класса Object.

Метод println аналогичен методу print, отличаясь лишь тем, что он добавляет к записываемой в поток строке символ перехода на следующую строку:

 

public void println();

public void println(boolean b);

public void println(char c);

public void println(char s[]);

public void println(double d);

public void println(float f);

public void println(int i);

public void println(long l);

public void println(Object obj);

public void println(String s);

Реализация метода println без параметров записывает только символ перехода на следующую строку.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-14; Просмотров: 4784; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.027 с.)
Главная | Случайная страница | Обратная связь