Kursinnehåll
Java Fördjupad
Java Fördjupad
Metod toString()
Hur skriver man ut ett objekt enklare?
För att visa all data för ett objekt med kommandot System.out.println(object);
i Java, finns det en metod som heter toString();
.
toString()
Metoden toString
i Java är en inbyggd metod som tillhör klassen Object
. Den används för att returnera en strängrepresentation av ett objekt. Som standard, när vi anropar toString
på ett objekt, returneras en sträng som innehåller klassnamnet följt av objektets hashkod.
Låt oss titta på ett exempel:
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
En hashkod är, enkelt uttryckt, en unik identifierare för ett objekt som lagras i minnet. Vi kan också se hashkoden för ett objekt genom att anropa metoden hashCode()
på det, till exempel:
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); } }
I det fallet uppstår frågan: hur kan vi få något mer specifikt istället för hashkoden för ett objekt? För sådana fall kan vi överskrida metoden toString()
.
Arv och metodöverskrivning är omfattande ämnen som vi kommer att studera i en separat kurs. För tillfället kommer vi endast att använda metodöverskrivning för metoden toString()
.
Hur man använder toString()
För att överskrida en metod behöver vi använda följande syntax:
Main.java
@Override public String toString() { // block of code }
Vi använder annoteringen @Override
före denna metod. Med denna annotering känner kompilatorn igen att vi skriver över denna metod. Därefter anger vi syntaxen public String toString()
, vilket visar vilken exakt metod vi skriver över.
I metodens kropp definierar vi hur vårt objekt ska representeras som en sträng. Låt oss skriva över metoden för klassen 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 + "."; } }
Kommandot System.lineSeparator()
används för att skapa en ny rad.
Vi har definierat hur vårt objekt ska visas genom att sammanfoga strängar med deras värden. Därför, när vi försöker skriva ut ett objekt av klassen Person
, kommer vi att se detaljerad information om varje fält.
Låt oss skriva ut ett objekt med hjälp av main
-metoden och se hur det ser ut:
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 + "."; } }
Vi har fått information om klassen som objektet bob
tillhör samt detaljer om alla dess fält.
På så sätt kan vi överskrida och definiera metoden toString()
för att visa önskad information när vi skriver ut ett objekt. Låt oss skapa ett annat objekt av denna klass med konstruktorn för att se och förstärka hur metoden toString()
omvandlar objektet:
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(); } }
Vi kan se att det nya objektet alice
visas i konsolen med samma mall.
Slutsats
Genom att använda metoden toString()
har vi förenklat processen att visa objektinformation på skärmen avsevärt, vilket gör att vi sparar utrymme i main-metoden.
1. Varför behöver vi metoden toString()
?
2. Vilken annotation ska användas ovanför metoden toString()
?
Tack för dina kommentarer!