Назовите все методы класса Object в Java.
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Все методы класса 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() больше не используется