Wszystkie metody klasy Object, metoda toString() - 1

Witaj Amigo!

- Cześć!

— Dziś zajmiemy się klasą Object.
Spotkałeś się już z tym i wiesz, że Object jest klasą bazową dla wszystkich klas. Nie ma praktycznie żadnych danych, ale istnieje kilka metod.

Dlaczego potrzebuje metod? Czy ktoś tworzy jej obiekty?

- Spójrz na sytuację z tej strony - metody, które ma Object, generalnie mają wszystkie klasy. Te. Programiści Javy wzięli kilka metod, które ich zdaniem powinny mieć wszystkie klasy, i dodali je do klasy Object.

A w połączeniu z polimorfizmem – możliwością nadpisywania metod klasy Object w klasach pochodnych – tworzy to bardzo potężne narzędzie.

Zobaczmy, jakie są te metody:

metoda Opis
public String toString()
Zwraca łańcuchową reprezentację obiektu.
public native int hashCode()
public boolean equals(Object obj)
Kilka metod używanych do porównywania obiektów.
public final native Class getClass()
Zwraca specjalny obiekt opisujący bieżącą klasę.
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()
Metody kontrolowania dostępu do obiektu z różnych wątków. Kontrola synchronizacji wątków.
protected void finalize()
Metoda pozwala na „uwolnienie” natywnych zasobów innych niż Java: zamykanie plików, strumieni itp.
protected native Object clone()
Metoda pozwala sklonować obiekt: tworzy duplikat obiektu.

Metody można podzielić na 6 grup. Z niektórymi już się Państwo zapoznali, z resztą zapoznamy się na kolejnych wykładach.

Nie widzę tu nic przydatnego.

— Amigo! Gdyby te metody nie były ważne, nie byłyby dodawane do absolutnie wszystkich obiektów! Radzę więc przyjrzeć się bliżej, co to jest i dlaczego są potrzebne. Jeśli wydaje ci się, że nie są one ważne, oznacza to, że czegoś nie zrozumiałeś lub nie zrozumiałeś poprawnie.

- OK. Będę uważnie słuchał.

- Zacznijmy od metody toString();

Ta metoda pozwala uzyskać tekstowy opis dowolnego obiektu. Jego implementacja w klasie Object jest bardzo prosta:

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

getClass() i hashCode() są również metodami klasy Object.
Oto standardowy wynik wywołania takiej metody

java.lang.Object@12F456

A jaki jest pożytek z takiego opisu?

- Z takiego opisu można poznać klasę obiektu, na którym została wywołana ta metoda. Możesz także rozróżniać obiekty - różne obiekty odpowiadają różnym numerom po symbolu @.

Ale wartość tej metody jest inna. Tę metodę można przesłonić w dowolnej klasie i zwrócić bardziej odpowiedni lub bardziej szczegółowy opis obiektu.

Ale to nie wszystko. Dzięki temu, że dla każdego obiektu można uzyskać jego reprezentację tekstową, w Javie udało się zaimplementować obsługę „dodawania” napisów z obiektami.
Tutaj spójrz:

Kod Co naprawdę się dzieje
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);

Tak, używam go cały czas. Zwłaszcza gdy piszę program lub szukam w nim błędów. Przydatna metoda