Metodi toString()
Kuinka tulostaa olio helposti
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
1234567891011121314151617181920package 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 on yksinkertaisesti sanottuna olion yksilöllinen tunniste, joka tallennetaan muistiin. Voimme myös tarkastella olion hashkoodia kutsumalla sen hashCode()-metodia, esimerkiksi:
Main.java
123456789101112131415161718192021package 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ässä tapauksessa herää kysymys: kuinka voimme saada jotain tarkempaa kuin olion hajakoodi? Tällaisissa tilanteissa 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 ylikirjoittamiseksi tulee käyttää seuraavaa syntaksia:
Main.java
1234@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ääritämme syntaksin public String toString(), joka osoittaa, minkä tarkan metodin olemme ylikirjoittamassa.
Tämän metodin rungossa määrittelemme, miten olion tulisi esittäytyä merkkijonona. Ylikirjoitetaan metodi Person-luokalle:
Person.java
12345678910111213141516171819class 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() luo uuden rivin.
Olemme määritelleet, miltä olio 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
12345678910111213141516171819202122232425262728package 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ä kaikista sen kentistä.
Näin ollen voimme ylikirjoittaa ja määritellä toString()-metodin näyttämään halutut tiedot olion tulostuksen yhteydessä. Luodaan toinen olio tästä luokasta konstruktorin avulla, jotta voidaan havainnollistaa ja vahvistaa, miten toString()-metodi muuntaa olion:
Main.java
123456789101112131415161718192021222324252627282930package 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ä näytöllä, 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!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show an example of how to override the toString() method in a class?
What happens if I don't override the toString() method?
Can you explain more about method overriding and inheritance?
Awesome!
Completion rate improved to 2.63
Metodi toString()
Pyyhkäise näyttääksesi valikon
Kuinka tulostaa olio helposti
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
1234567891011121314151617181920package 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 on yksinkertaisesti sanottuna olion yksilöllinen tunniste, joka tallennetaan muistiin. Voimme myös tarkastella olion hashkoodia kutsumalla sen hashCode()-metodia, esimerkiksi:
Main.java
123456789101112131415161718192021package 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ässä tapauksessa herää kysymys: kuinka voimme saada jotain tarkempaa kuin olion hajakoodi? Tällaisissa tilanteissa 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 ylikirjoittamiseksi tulee käyttää seuraavaa syntaksia:
Main.java
1234@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ääritämme syntaksin public String toString(), joka osoittaa, minkä tarkan metodin olemme ylikirjoittamassa.
Tämän metodin rungossa määrittelemme, miten olion tulisi esittäytyä merkkijonona. Ylikirjoitetaan metodi Person-luokalle:
Person.java
12345678910111213141516171819class 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() luo uuden rivin.
Olemme määritelleet, miltä olio 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
12345678910111213141516171819202122232425262728package 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ä kaikista sen kentistä.
Näin ollen voimme ylikirjoittaa ja määritellä toString()-metodin näyttämään halutut tiedot olion tulostuksen yhteydessä. Luodaan toinen olio tästä luokasta konstruktorin avulla, jotta voidaan havainnollistaa ja vahvistaa, miten toString()-metodi muuntaa olion:
Main.java
123456789101112131415161718192021222324252627282930package 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ä näytöllä, 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!