Selalunya semasa mencipta program, anda perlu mengetahui kandungan objek. Untuk tujuan ini, kelas Java Object , kelas Java paling asas dalam hierarki kelas, mentakrifkan kaedah toString() khas . Ia mengembalikan rentetan aksara yang menerangkan objek. Pelaksanaan lalai kaedah toString() dalam Java menghasilkan output seperti ini:
package.class@hashCode
iaitu toString , yang ditakrifkan dalam java.lang.Object memberikan kod cincang objek dalam bentuk heksadesimal. Ini selalunya tidak begitu jelas dan berguna. Oleh itu, apabila mencipta kelas baharu, adalah kebiasaan untuk mengatasi toString() supaya rentetan pulangan mengandungi nama kelas, nama dan nilai semua pembolehubah. Mengatasi kaedah toString dengan betul boleh membantu dengan mengelog dan menyahpepijat program Java, ia menyediakan maklumat yang berharga dan penting. Ringkasnya, kaedah toString() digunakan dalam Java untuk mendapatkan objek rentetan yang mewakili nilai objek berangka. Dalam erti kata lain, ia menukar nombor kepada rentetan. Jika kaedah mengambil jenis data ringkas sebagai hujah, maka objek rentetan dikembalikan yang mewakili nilai jenis data ringkas.
Contoh kaedah Java toString().
Biasanya jika anda mencipta kelas, sebagai tambahan kepada kaedah toString() dalam Java anda perlu mengatasi kaedah equals , hashCode dan compareTo untuk mengetahui cara bekerja dengan objeknya. Tetapi buat masa ini, mari fokus pada toString . Dalam kebanyakan kes, menyerahkan maklumat teks tentang objek agak mudah. Anda hanya perlu memahami apa sebenarnya yang pengguna ingin lihat semasa log masuk. Mari kita berikan contoh dan buat Kelas yang menerangkan titik pada satah. Ia mempunyai dua koordinat: coordinateX, coordinateY. Sememangnya, mereka harus dipaparkan pada skrin jika pengguna bertanya "objek apakah ini" sama seperti nama kelas itu sendiri. Inilah yang akan kami tunjukkan dalam kaedah toString() yang ditindih . Sekarang kita mencipta kelas itu sendiri, medannya (koordinat), pembina, getter untuk mendapatkan koordinat (pasti, mungkin untuk tidak menciptanya, tetapi dari sudut penggunaan OOP yang betul, getter adalah amalan yang baik). Hanya untuk menggambarkan, mari kita cipta kaedah yang mencipta titik baharu — jumlah dua yang lain, dan juga mengatasi kaedah sama dan kod cincang .public class Point implements Comparable<Point> {
private final int coordinateX;
private final int coordinateY;
public Point(final int coordinateX, final int coordinateY) {
this.coordinateX = coordinateX;
this.coordinateY = coordinateY;
}
public int getX() {
return coordinateX;
}
public int getY() {
return coordinateY;
}
public Point sum(final Point that) {
return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
}
// here we override toString with coordinates and class name
@Override
public String toString() {
return "Point{"
+ "X: " + getX()
+ ", Y: " + getY()
+ '}';
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o == null || o.getClass() != this.getClass()) {
return false;
}
@Override
public int hashCode() {
return coordinateX + coordinateY;
}
Sekarang mari kita buat kelas ujian dan kaedah utama. Di sana kami mendapat dua mata dan yang ketiga, yang kami peroleh daripada penjumlahan dua mata. Kami menggunakan kaedah toString pada tahap ini dan mencetaknya.
//toString() method demo
public class Test {
public static void main(String[] args) {
Point myPoint1 = new Point(5,7);
Point myPoint2 = new Point(-2, 8);
Point mySum = myPoint1.sum(myPoint2);
//call toString explicitly
System.out.println(mySum.toString());
}
}
Hasil kerja program ini adalah di bawah:
Titik{X: 3, Y: 15}
Anda sebenarnya tidak perlu memanggil kaedah toString secara eksplisit , dan selalunya tidak. Untuk memanggil kaedah toString() , hanya hantar objek yang dikehendaki ke System.out.println . Jadi kelas ujian kami akan kelihatan seperti ini:
//toString method demo
public class Test {
public static void main(String[] args) {
Point myPoint1 = new Point(5,7);
Point myPoint2 = new Point(-2, 8);
Point mySum = myPoint1.sum(myPoint2);
//call toString implicitly
System.out.println(mySum);
}
}
Output program adalah sama seperti sebelumnya. Bagaimana jika kita tidak mengatasi kaedah toString , tetapi mahu mencetak objek? Dalam kes ini, kaedah toString kelas Objek akan dipanggil. Dalam contoh kami, jika kami mengalih keluar kaedah toString daripada kelas Point kami , dan membiarkan segala-galanya seperti dalam kelas ujian, kami akan mendapat hasil berikut:
Titik@12
Di sini kita mempunyai kod cincang objek dalam perenambelasan.