Всички методи на класове на обекти, плюс повече за метода toString() - 1

„Здрасти, Амиго!“

"Здрасти!"

„Днес ще изучаваме класа Object.
Вече сте го срещали и знаете, че Object е базовият клас за всички класове. Той практически няма данни, но има няколко метода.“

"Защо има нужда от методи? Някой наистина ли създава екземпляри на класа Object?"

„Погледнете го по този начин: методите в класа Object са общи за всички класове. С други думи, създателите на Java идентифицираха няколко метода, които според тях трябва да има всеки клас, и ги добавиха към класа Object.“

„И когато се комбинира с полиморфизъм (способността да се заменят методите на класа Object в производни класове), това се превръща в много мощен инструмент.“

„Нека да видим Howви са тези методи:“

Метод Описание
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 групи. Вече сте запознати с някои от тях, а с останалите ще се запознаем в следващите уроци."

— По няHowва причина не виждам нищо полезно тук.

„Амиго! Ако тези методи не бяха важни, нямаше да ги добавят към всеки един обект! Затова бих ви посъветвал да погледнете по-внимателно Howво представляват те и защо са необходими. Ако ви се струват маловажни , тогава or не сте разбрали нещо, or нещо не сте разбрали правилно."

"Добре. Ще слушам внимателно."

„Нека започнем с метода toString().

"Този метод ви позволява да получите текстово описание на всеки обект. Неговото внедряване в класа Object е много просто:"

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

"getClass() и hashCode() също са методи на клас Object.
Извикването на този метод обикновено води до резултат като този:"

java.lang.Object@12F456

— И Howва е ползата от такова описание?

"Това описание ви позволява да знаете класа на обекта, към който е извикан методът. Можете също така да правите разлика между обекти; различните обекти ще имат различни цифри след символа @."

"Но истинската стойност на този метод е другаде. Този метод може да бъде презаписан във всеки клас, за да върне по-подробно or подходящо описание на обекта."

„Но има още. Тъй като можете да получите текстово представяне на всеки обект, 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("Vincent");
System.out.println("Student is " + st);
Student st = new Student("Vincent");
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);

"Да, използвам това редовно. Особено когато пиша програма or търся грешки. Това е полезна операция."