Kurssisisältö
Java Laajennettu
Java Laajennettu
Metodi toString()
Kuinka helpottaa olion tulostamista?
Javan System.out.println(object);
-komennolla voidaan näyttää olion kaikki tiedot käyttämällä toString();
-metodia.
toString()
Javan toString
-metodi on sisäänrakennettu metodi, joka kuuluu Object
-luokkaan. Sitä käytetään palauttamaan olion merkkijonoesityksen. Oletuksena, kun kutsumme toString
-metodia oliolle, se palauttaa merkkijonon, joka sisältää luokan nimen ja olion hashkoodin.
Tarkastellaan esimerkkiä:
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
Hashcode tarkoittaa yksinkertaisesti objektin uniikkia tunnistetta, joka tallennetaan muistiin. Voimme myös tarkastella objektin hash-koodia kutsumalla sen hashCode()
-metodia, esimerkiksi:
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); } }
Tällöin herää kysymys: kuinka voimme saada jotain tarkempaa kuin objektin hash-koodi? Tällaisissa tapauksissa voimme ylikirjoittaa toString()
-metodin.
Perintä ja metodin ylikirjoitus ovat laajoja aiheita, joita käsittelemme erillisessä kurssissa. Toistaiseksi käytämme metodin ylikirjoitusta vain toString()
-metodille.
Kuinka käyttää toString()-metodia
Metodin ylikirjoittamiseen käytetään seuraavaa syntaksia:
Main.java
@Override public String toString() { // block of code }
Käytämme annotaatiota @Override
ennen tätä metodia. Tämän annotaation avulla kääntäjä tunnistaa, että ylikirjoitamme tämän metodin. Seuraavaksi määrittelemme syntaksin public String toString()
, joka osoittaa, minkä tarkan metodin olemme ylikirjoittamassa.
Tämän metodin rungossa määrittelemme, miten olion tulisi esittää itsensä merkkijonona. Ylikirjoitetaan metodi Person
-luokalle:
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 + "."; } }
Komento System.lineSeparator()
käytetään uuden rivin luomiseen.
Olemme määritelleet, miltä olion tulisi näyttää, yhdistämällä merkkijonoja niiden arvoihin. Siksi, kun yritämme tulostaa Person
-luokan olion, näemme yksityiskohtaiset tiedot jokaisesta kentästä.
Tulostetaan olio main
-metodin avulla ja katsotaan, miltä se näyttää:
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 + "."; } }
Olemme saaneet tietoa luokasta, johon olio bob
kuuluu, sekä yksityiskohdat kaikista sen kentistä.
Voimme siis ylikirjoittaa ja määritellä toString()
-metodin näyttämään halutut tiedot olion tulostuksen yhteydessä. Luodaan toinen olio tästä luokasta konstruktorin avulla, jotta näemme ja vahvistamme, miten toString()
-metodi muuntaa olion:
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(); } }
Voimme nähdä, että uusi olio alice
näytetään konsolissa samalla mallilla.
Yhteenveto
Käyttämällä toString()
-metodia olemme huomattavasti yksinkertaistaneet olion tietojen näyttämistä ruudulla, mikä mahdollistaa tilan säästämisen päämetodissa.
1. Miksi tarvitsemme toString()
-metodia?
2. Mikä annotaatio tulisi käyttää toString()
-metodin yläpuolella?
Kiitos palautteestasi!