среда, 22 июня 2011 г.

Object. Какие его методы Вы можете назвать?

Класс Object является базовым для всех остальных классов. Он определяет методы, которые поддерживаются любым классом в Java.
Class getClass() - Возвращает класс во время выполнения
Этот метод возвращает объект класса Class, который описывает класс, от которого был порожден этот объект. Класс Class будет рассмотрен ниже. У него есть метод getName(), возвращающий имя класса:

String s = "abc";
Class cl=s.getClass();
print(cl.getName()); 
   
Результатом будет строка:
java.lang.String 
boolean  equals()- служит для сравнения объектов по значению, а не по ссылке
Поскольку сам Object не имеет полей, а значит, и состояния, в этом классе метод equals возвращает результат сравнения по ссылке
Point p1=new Point(2,3);
Point p2=new Point(2,3);
print(p1.equals(p2));
   
Результатом будет true.
int hashCode() - Возвращает hash код для объекта
 Цель hashCode() – представить любой объект целым числом
Хеш-код – это целое число, которое сопоставляется с данным объектом. Оно позволяет организовать хранение набора объектов с возможностью быстрой выборки
String toString() - Возвращает строковое представление объекта
Этот метод позволяет получить текстовое описание любого объекта. Создавая новый класс, данный метод можно переопределить и возвращать более подробное описание. Для класса Object и его наследников, не переопределивших toString(), метод возвращает следующее выражение:
getClass().getName()+"@"+hashCode()
protected Object clone() - Создает и возвращает копию этого объекта
При выполнении метода clone() сначала проверяется, можно ли клонировать исходный объект. Если разработчик хочет сделать объекты своего класса доступными для клонирования через Object.clone(), то он должен реализовать в своем классе интерфейс Cloneable. В этом интерфейсе нет ни одного элемента, он служит лишь признаком для виртуальной машины, что объекты могут быть клонированы. Если проверка не выполняется успешно, метод порождает ошибку CloneNotSupportedException.
Если интерфейс Cloneable реализован, то порождается новый объект от того же класса, от которого был создан исходный объект. При этом копирование выполняется на уровне виртуальной машины, никакие конструкторы не вызываются. Затем значения всех полей, объявленных, унаследованных либо объявленных в родительских классах, копируются. Полученный объект возвращается в качестве клона.
Почему метод clone объявлен как protected?
"потому что этот метод не реализован в Object и должен быть переопределён (возможно с расширением видимости)
Потому что объекты не поддерживают клонирование просто так. А зачем выставлять на вид метод, который не работает? Если ты сделаешь так, чтоб он работал, то тебе нужно его определить как public. 
Пример клонирования
public class Test implements Cloneable {
  Point p;
  int height;

  public Test(int x, int y, int z) {
    p=new Point(x, y);
    height=z;
  }

  public static void main(String s[]) {
    Test t1=new Test(1, 2, 3), t2=null;
    try {
      t2=(Test) t1.clone();
    } catch (CloneNotSupportedException e) {}
    t1.p.x=-1;
    t1.height=-1;
    System.out.println("t2.p.x=" + t2.p.x + ",
      t2.height=" + t2.height);
  }
}
protected void finalize() - Вызывается сборщиком мусора когда нет больше ссылок на объект
Данный метод вызывается при уничтожении объекта автоматическим сборщиком мусора (garbage collector). В классе Object он ничего не делает, однако в классе-наследнике позволяет описать все действия, необходимые для корректного удаления объекта, такие как закрытие соединений с БД, сетевых соединений, снятие блокировок на файлы и т.д. В обычном режиме напрямую этот метод вызывать не нужно, он отработает автоматически. Если необходимо, можно обратиться к нему явным образом.
В методе finalize() нужно описывать только дополнительные действия, связанные с логикой работы программы. Все необходимое для удаления объекта JVM сделает сама.


Комментариев нет:

Отправить комментарий