Kursinnhold
Java Utvidet
Java Utvidet
Metoden toString()
Hvordan skrive ut et objekt enklere?
For å vise all dataen til et objekt ved å bruke kommandoen System.out.println(object);
i Java, finnes det en metode som heter toString();
.
toString()
Metoden toString
i Java er en innebygd metode som tilhører Object
-klassen. Den brukes til å returnere en strengrepresentasjon av et objekt. Som standard, når vi kaller toString
på et objekt, returnerer den en streng som inneholder klassenavnet etterfulgt av hashkoden til objektet.
La oss se på et eksempel:
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 hashkode er, enkelt sagt, en unik identifikator for et objekt som er lagret i minnet. Vi kan også se hashkoden til et objekt ved å kalle hashCode()
-metoden på det, for eksempel:
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 dette tilfellet oppstår spørsmålet: hvordan kan vi få noe mer spesifikt i stedet for hashkoden til et objekt? For slike tilfeller kan vi overstyre toString()
-metoden.
Arv og metodeoverstyring er omfattende emner som vi skal studere i et eget kurs. Foreløpig skal vi bruke metodeoverstyring kun for toString()
-metoden.
Hvordan bruke toString()
For å overstyre en metode må vi bruke følgende syntaks:
Main.java
@Override public String toString() { // block of code }
Vi bruker annotasjonen @Override
foran denne metoden. Med denne annotasjonen gjenkjenner kompilatoren at vi overstyrer denne metoden. Deretter angir vi syntaksen public String toString()
, som viser hvilken spesifikk metode vi overstyrer.
I metoden definerer vi hvordan objektet vårt skal representeres som en streng. La oss overstyre metoden for 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 + "."; } }
Kommandoen System.lineSeparator()
brukes for å lage en ny linje.
Vi har definert hvordan objektet vårt skal vises ved å sette sammen strenger med deres verdier. Derfor, når vi prøver å skrive ut et objekt av Person
-klassen, vil vi se detaljert informasjon om hvert felt.
La oss skrive ut et objekt ved hjelp av main
-metoden og se hvordan 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 informasjon om klassen som objektet bob
tilhører og detaljer om alle dens felt.
Dermed kan vi overstyre og definere toString()
-metoden for å vise ønsket informasjon når vi skriver ut et objekt. La oss opprette et nytt objekt av denne klassen ved å bruke konstruktøren for å se og forsterke hvordan toString()
-metoden transformerer 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 ser at det nye objektet alice
vises i konsollen ved å bruke samme mal.
Konklusjon
Ved å bruke toString()
-metoden har vi forenklet prosessen med å vise objektinformasjon på skjermen betydelig, noe som lar oss spare plass i hovedmetoden.
1. Hvorfor trenger vi toString()
-metoden?
2. Hvilken annotasjon bør brukes over toString()
-metoden?
Takk for tilbakemeldingene dine!