12 методов, обычно используемых в классе Object в Java, сколько вы использовали?

Java

предисловие

Метод объекта в Java является очень высокой точкой в ​​интервью, в конце концов, объект является «предком» всех классов. Все классы в Java имеют обычный класс объекта предка, а подклассы наследуют публичные методы во всех классах объекта.
Сначала взгляните на структуру класса Object (сочетание клавиш: alt+7):

1. Метод getClass

public final native Class<?> getClass();
окончательный метод, получить объект класса среды выполнения объекта, объект класса — это объект, который описывает класс, к которому принадлежит объект. Этот метод обычно используется в сочетании с механизмом отражения Java.

2. метод хеш-кода

public native int hashCode();
Этот метод в основном используется для получения хеш-значения объекта. В Object этот метод по умолчанию возвращает адрес кучи памяти объекта.

3. метод равных

public boolean equals(Object obj) {        return (this == obj);}
该方法用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回 true,否则返回 false。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。 Подклассы обычно переопределяют этот метод.

4. метод клонирования

protected native Object clone() throws CloneNotSupportedException;
Этот метод является защищенным методом, который реализует поверхностное копирование объектов. Этот метод может быть вызван только в том случае, если реализован интерфейс Cloneable, в противном случае будет сгенерировано исключение CloneNotSupportedException.
Метод клонирования по умолчанию — поверхностная копия. Так называемая неглубокая копия означает, что объект, на который ссылается атрибут в объекте, будет копировать только адрес ссылки без перераспределения памяти объекта, на который ссылаются. Глубокая копия также воссоздает указанный объект.

5. метод toString

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Возвращает объект String, который обычно охватывается подклассами. Формат возврата по умолчанию следующий: имя класса объекта + @ + hashCode шестнадцатеричная строка.

6. метод уведомления

public final native void notify();
Метод Final в основном используется для пробуждения потока, ожидающего объекта.

7. метод уведомления всех

public final native void notifyAll();
final метод, в основном используемый для пробуждения всех потоков, ожидающих этого объекта.

8. метод ожидания (длинный тайм-аут)

public final native void wait(long timeout) throws InterruptedException;
Метод ожидания заключается в том, чтобы заставить текущий поток ждать блокировки объекта, при этом текущий поток должен быть владельцем объекта, то есть иметь блокировку объекта. Метод wait() ожидает, пока блокировка не будет получена или не будет прервана. wait(long timeout) устанавливает интервал ожидания и возвращает значение, если блокировка не получена в течение указанного времени.

9. Метод ожидания (длительный тайм-аут, int nanos)

public final void wait(long timeout, int nanos) throws InterruptedException {
  if (timeout < 0) {
    throw new IllegalArgumentException("timeout value is negative");
  }

  if (nanos < 0 || nanos > 999999) {
    throw new IllegalArgumentException(
              "nanosecond timeout value out of range");
  }

  if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
    timeout++;
  }

  wait(timeout);
}
Параметр Описание
timeout: максимальное время ожидания (миллисекунды)
nanos: дополнительное время в диапазоне миллисекунд (0-999999)
Этот метод заставляет текущий поток ожидать, пока другой поток не вызовет метод notify() или метод notifyAll() этого объекта, или пока не истечет указанное время. Этот метод похож на один параметр метода ожидания, но позволяет более точно контролировать время ожидания уведомления перед отказом. Количество в реальном времени, рассчитанное в наносекундах, рассчитывается следующим образом:
1000000 * timeout + nanos
Во всем остальном этот метод делает то же самое, что и wait(long timeout). В частности, wait(0, 0) означает то же самое, что и wait(0).

10. метод ожидания

public final void wait() throws InterruptedException {  wait(0);}
Видно, что метод wait() на самом деле вызывает метод wait(long timeout), за исключением того, что таймаут равен 0, то есть он не ждет.

11. завершить метод

protected void finalize() throws Throwable { }
Этот метод является методом защиты, который в основном используется для повторного вызова во время сборки мусора.Если мы реализуем этот метод, объект может быть снова воскрешен в этом методе, чтобы избежать повторного использования сборщиком мусора.

Наконец

Прошу всех обратить внимание на мой официальный аккаунт [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.