← Назад к вопросам

Назовите все методы класса Object в Java.

1.0 Junior🔥 171 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Все методы класса Object в Java

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

Основные методы Object

Всего в классе Object 11 методов:

1. equals(Object obj)

Сравнивает два объекта по ссылке. По умолчанию использует оператор ==.

public boolean equals(Object obj) {
    return this == obj;
}

Обычно переопределяется для сравнения содержимого:

class Person {
    String name;
    int age;
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (!(obj instanceof Person)) return false;
        
        Person other = (Person) obj;
        return name.equals(other.name) && age == other.age;
    }
}

2. hashCode()

Возвращает хеш-код объекта. Необходимо переопределять вместе с equals().

@Override
public int hashCode() {
    return Objects.hash(name, age);
}

3. toString()

Возвращает строковое представление объекта.

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Часто переопределяется:

@Override
public String toString() {
    return "Person{name='" + name + "', age=" + age + "}";
}

4. getClass()

Возвращает объект Class текущего класса. Используется для рефлексии.

Object obj = "Hello";
Class<?> clazz = obj.getClass();

5. clone()

Создает поверхностную копию объекта. Класс должен имплементировать Cloneable.

class Person implements Cloneable {
    String name;
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

6. wait() / wait(long timeout) / wait(long timeout, int nanos)

Методы для синхронизации потоков. Вызывают текущий поток в состояние ожидания.

synchronized (obj) {
    obj.wait();
    obj.wait(1000);
}

7. notify()

Пробуждает один поток из тех, что ждут на этом объекте.

synchronized (obj) {
    obj.notify();
}

8. notifyAll()

Пробуждает все потоки, ожидающие на этом объекте.

synchronized (obj) {
    obj.notifyAll();
}

9. finalize()

Депрекейтирован! Вызывался перед удалением объекта сборщиком мусора (Java 9+).

@Deprecated
protected void finalize() throws Throwable {
}

10. registerNatives()

Статический приватный метод для регистрации нативных методов.

11. Доступ к методам

  • public: equals, hashCode, toString, getClass, clone, wait, notify, notifyAll
  • protected: clone, finalize
  • private: registerNatives

Практический пример

public class Car {
    private String brand;
    private int year;
    
    public Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof Car)) return false;
        Car car = (Car) obj;
        return brand.equals(car.brand) && year == car.year;
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(brand, year);
    }
    
    @Override
    public String toString() {
        return "Car{brand='" + brand + "', year=" + year + "}";
    }
}

Важные моменты

  • Контракт equals-hashCode: если два объекта равны по equals(), их hashCode() должны быть одинаковыми
  • wait/notify требуют synchronized блоков
  • clone() создает поверхностную копию
  • toString() нужен для удобства отладки
  • finalize() больше не используется