Kursinhalt
Java Erweitert
Java Erweitert
Methode ToString()
Wie kann man ein Objekt einfacher ausgeben?
Um alle Daten eines Objekts mit dem Befehl System.out.println(object);
in Java anzuzeigen, gibt es eine Methode namens toString();
.
toString()
Die Methode toString
in Java ist eine eingebaute Methode, die zur Klasse Object
gehört. Sie wird verwendet, um eine String-Darstellung eines Objekts zurückzugeben. Standardmäßig gibt toString
beim Aufruf auf einem Objekt einen String zurück, der den Klassennamen gefolgt vom Hashcode des Objekts enthält.
Schauen wir uns das Beispiel an:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }
HashCode
Ein Hashcode ist einfach ausgedrückt ein eindeutiger Bezeichner für ein Objekt, das im Speicher abgelegt ist. Den Hashcode eines Objekts können wir auch sehen, indem wir die Methode hashCode()
darauf aufrufen, zum Beispiel:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }
In diesem Fall stellt sich die Frage: Wie können wir etwas Spezifischeres als den Hashcode eines Objekts erhalten? Für solche Fälle können wir die Methode toString()
überschreiben.
Vererbung und Methodenüberschreibung sind umfangreiche Themen, die wir in einem separaten Kurs behandeln werden. Für den Moment verwenden wir die Methodenüberschreibung nur für die Methode toString()
.
Verwendung von toString()
Um eine Methode zu überschreiben, müssen wir folgende Syntax verwenden:
Main.java
@Override public String toString() { // block of code }
Wir verwenden die Annotation @Override
vor dieser Methode. Mit dieser Annotation erkennt der Compiler, dass wir diese Methode überschreiben. Anschließend geben wir die Syntax public String toString()
an, um festzulegen, welche Methode genau überschrieben wird.
Im Rumpf dieser Methode definieren wir, wie unser Objekt als Zeichenkette dargestellt werden soll. Überschreiben wir die Methode für die Klasse Person
:
Person.java
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Der Befehl System.lineSeparator()
wird verwendet, um eine neue Zeile zu erzeugen.
Wir haben definiert, wie unser Objekt erscheinen soll, indem wir Zeichenfolgen mit ihren Werten verknüpft haben. Daher sehen wir beim Ausgeben eines Objekts der Klasse Person
detaillierte Informationen zu jedem Feld.
Geben wir ein Objekt mit der main
-Methode aus und sehen uns das Ergebnis an:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Wir haben Informationen über die Klasse erhalten, zu der das Objekt bob
gehört, sowie Details zu allen seinen Feldern.
Somit können wir die Methode toString()
überschreiben und definieren, um beim Ausgeben eines Objekts die gewünschten Informationen anzuzeigen. Erstellen wir ein weiteres Objekt dieser Klasse mit dem Konstruktor, um zu sehen und zu festigen, wie die Methode toString()
das Objekt transformiert:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }
Wir sehen, dass das neue Objekt alice
in der Konsole mit derselben Vorlage angezeigt wird.
Fazit
Durch die Verwendung der toString()
-Methode haben wir den Prozess der Anzeige von Objektinformationen auf dem Bildschirm erheblich vereinfacht und können dadurch Platz in der Hauptmethode sparen.
1. Warum benötigen wir die toString()
-Methode?
2. Welche Annotation sollte über die Methode toString()
verwendet werden?
Danke für Ihr Feedback!