Cursusinhoud
Java Uitgebreid
Java Uitgebreid
Methode ToString()
Hoe een object eenvoudiger afdrukken?
Om alle gegevens van een object weer te geven met het commando System.out.println(object);
in Java, is er een methode genaamd toString();
.
toString()
De toString
-methode in Java is een ingebouwde methode die behoort tot de Object
-klasse. Deze wordt gebruikt om een stringrepresentatie van een object terug te geven. Standaard, wanneer we toString
aanroepen op een object, retourneert deze een string die de klasnaam gevolgd door de hashcode van het object bevat.
Laten we naar het voorbeeld kijken:
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
Een hashcode is, eenvoudig gezegd, een unieke identificatiecode voor een object dat in het geheugen is opgeslagen. We kunnen de hashcode van een object ook bekijken door de methode hashCode()
erop aan te roepen, bijvoorbeeld:
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 dat geval rijst de vraag: hoe kunnen we iets specifiekers krijgen in plaats van de hashcode van een object? Voor zulke gevallen kunnen we de methode toString()
overschrijven.
Overerving en methode-overschrijving zijn uitgebreide onderwerpen die we in een aparte cursus zullen behandelen. Voor nu gebruiken we methode-overschrijving alleen voor de methode toString()
.
Gebruik van toString()
Om een methode te overschrijven, moeten we de volgende syntaxis gebruiken:
Main.java
@Override public String toString() { // block of code }
We gebruiken de annotatie @Override
vóór deze methode. Met deze annotatie herkent de compiler dat we deze methode overschrijven. Vervolgens specificeren we de syntaxis public String toString()
, waarmee we aangeven welke exacte methode we overschrijven.
In de body van deze methode definiëren we hoe ons object als een string moet worden weergegeven. Laten we de methode overschrijven voor de 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 + "."; } }
Het commando System.lineSeparator()
wordt gebruikt om een nieuwe regel te creëren.
We hebben gedefinieerd hoe ons object eruit moet zien door strings met hun waarden te combineren. Daarom zullen we, wanneer we proberen een object van de klasse Person
af te drukken, gedetailleerde informatie over elk veld zien.
Laten we een object afdrukken met behulp van de main
-methode en bekijken hoe dit eruitziet:
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 + "."; } }
We hebben informatie verkregen over de klasse waartoe het object bob
behoort en details over alle velden ervan.
Zo kunnen we de methode toString()
overschrijven en definiëren om de gewenste informatie weer te geven bij het afdrukken van een object. Laten we een ander object van deze klasse maken met behulp van de constructor om te zien en te bevestigen hoe de methode toString()
het object transformeert:
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(); } }
We zien dat het nieuwe object alice
in de console wordt weergegeven met hetzelfde sjabloon.
Conclusie
Door gebruik te maken van de toString()
-methode hebben we het proces van het weergeven van objectinformatie op het scherm sterk vereenvoudigd, waardoor we ruimte besparen in de main-methode.
1. Waarom hebben we de toString()
-methode nodig?
2. Welke annotatie moet boven de toString()
-methode worden gebruikt?
Bedankt voor je feedback!