JavaRush/Курсы/Java Multithreading/Все методы класса Object, метод toString()

Все методы класса Object, метод toString()

Открыта
Все методы класса Object, метод toString() - 1

— Привет, Амиго!

— Привет!

— Сегодня мы будем изучать класс Object.
Ты уже сталкивался с ним, и знаешь, что Object – базовый класс для всех классов. У него практически нет никаких данных, но есть несколько методов.

— А зачем ему методы? Разве кто-то создает его объекты?

— Посмотри на ситуацию с такой стороны – методы, которые есть у Object’а, есть вообще у всех классов. Т.е. разработчики Java отобрали несколько методов, которые, по их мнению, должны быть у всех классов и добавили их в класс Object.

А в сочетании с полиморфизмом – возможностью переопределять методы класса Object в классах-наследниках – это порождает очень мощный инструмент.

Давай посмотрим, что же это за методы:

Метод Описание
public String toString()
Возвращает строковое представление объекта.
public native int hashCode()
public boolean equals(Object obj)
Пара методов, которые используются для сравнения объектов.
public final native Class getClass()
Возвращает специальный объект, который описывает текущий класс.
public final native void notify()
public final native void notifyAll()
public final native void wait(long timeout)
public final void wait(long timeout, intnanos)
public final void wait()
Методы для контроля доступа к объекту из различных нитей. Управление синхронизацией нитей.
protected void finalize()
Метод позволяет «освободить» родные не-Java ресурсы: закрыть файлы, потоки и т.д.
protected native Object clone()
Метод позволяет клонировать объект: создает дубликат объекта.

Методы можно разбить на 6 групп. С некоторыми ты уже знаком, а с остальными мы познакомимся в ближайших лекциях.

— Что-то не вижу тут ничего полезного.

— Амиго! Если бы эти методы были не важны, их бы не добавили абсолютно всем объектам! Так что советую тебе более внимательно разобраться – что это такое и зачем они нужны. Если тебе кажется, что они не важны, значит, ты что-то не понял или понял не правильно.

— Ок. Я буду внимательно слушать.

— Начнем с метода toString();

Этот метод позволяет получить текстовое описание любого объекта. Реализация его в классе Object очень простая:

return getClass().getName() + "@" + Integer.toHexString(hashCode());

getClass() и hashCode() – это тоже методы класса Object.
Вот стандартный результат вызова такого метода

java.lang.Object@12F456

— И в чем же польза такого описания?

— Из такого описания можно узнать класс объекта, у которого вызвали данный метод. А также можно различать объекты – разным объектам соответствуют разные цифры, идущие после символа @.

Но ценность данного метода в другом. Данный метод можно переопределить в любом классе и возвращать более нужное или более детальное описание объекта.

Но и это еще не все. Благодаря тому, что для каждого объекта можно получить его текстовое представление, в Java можно было реализовать поддержку «сложения» строк с объектами.
Вот смотри:

Код Что происходит на самом деле
int age = 18;
System.out.println("Age is " + age);
String s = String.valueOf(18);
String result = "Age is " + s;
System.out.println(result);
Student st = new Student("Vasya");
System.out.println("Student is " + st);
Student st = new Student("Vasya");
String result = "Student is " + st.toString();
System.out.println(result);
Car car = new Porsche();
System.out.println("My car is " + car);
Car car = new Porsche();
String result = "My car is " + car.toString();
System.out.println(result);

— Да, я постоянно этим пользуюсь. Особенно когда пишу программу или ищу в ней ошибки. Полезный метод

Комментарии (114)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
TimJohnzz
Уровень 23
22 октября, 14:27
Чет я не понял, если мы напишем System.out.println("Student is " + st) нам типо выведет "Student is Vasya"? Нет же? Надо писать типо "Student is + st.name" условно?? Тоже самое с поршем? Тут же наверное с учетом переопределения toString говорится, но включили бы это тоже в пример
Euraks Backend Developer
1 ноября, 14:15
зависит от реализации метода toString()
C0N5P1RACY QA Automation Engineer
9 февраля, 13:21
Я не пойму, я точно на 3м квесте? Почему мне показывают то, что учат с самого начала?
FosTeR
Уровень 51
6 апреля, 18:19
Повторенье мать ученья😁 Ну и плюс после первых пару квестов, возможно более осознанно смотришь на данную лекцию. Так сказать там узнавал, а здесь вспомнил что то, и более осознанно прочитал. но это чисто мое мнение.😊
Anonymous #3585174
Уровень 33
22 сентября 2025, 13:02
Like
No Name
Уровень 22
16 ноября 2024, 12:11
+лекция в копилке
Илюха Будущий ЮниорJava - стажёр в ASTON
6 сентября 2024, 10:11
native - значит метод написан не на Java (C, C++)
AnastasiaЯ зеленый новичок в изучаю с нуля
11 июня 2024, 07:32
Вот попроще обьяснение, кому надо - `equals()` - проверяет обьекты на равенство по ссылке - `hashCode()` - проверяет обьекты на равенство по хеш коду - `toString()` - превращает обьект в строку - `getClass()` - возвращает метаданные обьекта - `notify()` - пробуждает 1 поток - `notifyAll()` - пробуждает все потоки - `wait()` - переводит поток в состояние ожидания - `wait(long timeOut)` - переводит поток в состояние ожидания на указанное время - `wait(long timeOut, int nanos)` - переводит поток в состояние ожидания на указанное время - finalize(); - принудительно очищает ресурсы. Устаревший, не рекомендуется использовать. Вместо него стоит использовать `AutoClosable.close()` или `Closable.close()` - clone() - создает копию обьекта
Anonymous #2444676
Уровень 19
12 июня 2024, 14:02
`equals()`проверяет содержимое, а не ссылки, так как ссылки проверяются ==
Solaire
Уровень 42
24 июня 2024, 12:28
В реализации класса Object метод equals() сравнивает именно ссылки текущего и переданного объектов, equals() может проверять содержимое исходя из нашей реализации или реализации других классов, например, String. Поэтому он прав.
Mikhail TabakaevРаботает в ФБУЗ ЦГиЭКО
4 октября 2024, 01:58
- hashCode() - возвращает хеш-код объекта; - toString() - НЕ превращает объект в строку, а именно ВОЗВРАЩАЕТ СТРОКОВОЕ ПРЕДСТАВЛЕНИЕ объекта!!! например, у пользовательского класса можно переопределить этот метод, наследованный из класса Object, и, тем, самым мы ВЫБОРОЧНО добавим только интересующие нас параметры (свойства / поля и т.д.) объекта класса, т.е. мы можем вывести на печать не все, а именно те поля, которые нам на самом деле интересны! - clone() - не создает копию (и не создает новую ссылку на существующий объект), а именно КЛОНИРУЕТ объект. копия и клон объекта - это разные вещи!!!
Максим Li Backend Developer
12 мая 2024, 20:19
12.05.2024
Anonymous #3390940
Уровень 38
15 февраля 2024, 17:50
🦝
Dmitry Shaburov
Уровень 33
22 ноября 2023, 06:32
22.11.2023
Nikita
Уровень 35
17 ноября 2023, 17:11
17/11/2023