Drucken von Objekten in Java

Mohammad Irfan 12 Oktober 2023
  1. Verstehen der Objektausgabe
  2. Objekt in Java drucken
  3. Array-Objekte
  4. Wie drucke ich Objekte?
  5. Array-Objekt drucken
  6. Mehrdimensionales Array-Objekt drucken
  7. Sammlungsobjekte in Java drucken
  8. Verwenden der Apache Commons-Bibliothek
  9. Zusammenfassung
Drucken von Objekten in Java

Dieses Tutorial führt ein, wie ein Objekt in Java gedruckt wird, und listet einige Beispielcodes auf, um das Thema zu verstehen.

Ein Objekt ist eine Instanz einer Klasse, und wir können damit auf die Klasseneigenschaften und Methoden zugreifen. Wenn wir jedoch versuchen, ein Objekt mit der Methode System.out.println() zu drucken, erhalten wir möglicherweise nicht die erwartete Ausgabe. Wir drucken oft die Objekteigenschaften zum Debuggen und um sicherzustellen, dass alles gut funktioniert. In diesem Tutorial erfahren Sie, wie Sie Objekteigenschaften in Java drucken.

Verstehen der Objektausgabe

Über Objekte

  • Versuchen wir zu verstehen, was passiert, wenn wir ein Objekt drucken. Wenn wir die Methode System.out.print() aufrufen, dann wird die Methode toString() der Klasse Object aufgerufen.
  • Wie wir wissen, erweitern alle Klassen in Java die Klasse Object. Die Methode toString() kann also auf jede Instanz einer beliebigen Klasse angewendet werden.
  • Diese Methode gibt einen String zurück, der sich aus dem Klassennamen und dem Hashcode des Objekts zusammensetzt. Diese beiden sind durch das @-Symbol verbunden.

Objekt in Java drucken

Lassen Sie uns eine neue Klasse erstellen und versuchen, ihre Objekte zu drucken.

class Student {
  private String studentName;
  private int regNo;
  private Double gpa;
  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
}
public class Demo {
  public static void main(String[] args) {
    Student s1 = new Student("Justin", 101, 8.81);
    Student s2 = new Student("Jessica", 102, 9.11);
    System.out.println(s1);
    System.out.println(s2);
  }
}

Ausgabe:

Student@7a81197d
Student@5ca881b5

Der erste Teil der Ausgabe zeigt den Klassennamen (in diesem Fall Student) und der zweite Teil zeigt einen eindeutigen Hashcode für das Objekt. Wir erhalten jedes Mal einen anderen Hashcode, wenn wir den obigen Code ausführen.

Array-Objekte

Ein Array ist in Java auch ein Objekt, und wir erhalten seine Elemente nicht, wenn wir versuchen, ein Array an die Konsole zu drucken. Lassen Sie uns den folgenden Code ausführen und seine Ausgabe anzeigen.

public class Demo {
  public static void main(String[] args) {
    int[] integerArr = {5, 10, 15};
    double[] doubleArr = {5.0, 10.0, 15.0};
    char[] charArr = {'A', 'B', 'C'};
    String[] stringArr = {"Justin", "Jessica"};
    int[][] twoDimArray = {{1, 2, 3}, {4, 5, 6}};
    System.out.println("Integer Array:" + integerArr);
    System.out.println("Double Array:" + doubleArr);
    System.out.println("Char Array:" + charArr);
    System.out.println("String Array:" + stringArr);
    System.out.println("2D Array:" + twoDimArray);
  }
}

Ausgabe:

Integer Array:[I@36baf30c
Double Array:[D@7a81197d
Char Array:[C@5ca881b5
String Array:[Ljava.lang.String;@24d46ca6
2D Array:[[I@4517d9a3
  • Die eckigen Klammern geben die Dimension des Arrays an. Bei 1-D-Arrays wird eine einzelne öffnende eckige Klammer gedruckt. Für das 2-D-Array haben wir zwei Klammern.
  • Das nächste Zeichen nach der Klammer gibt an, was im Array gespeichert ist. Für das Integer-Array wird ein I ausgegeben. Für das char-Array wird der Buchstabe C gedruckt.
  • Das L für das String-Array gibt an, dass das Array Objekte einer Klasse enthält. In solchen Fällen wird als nächstes der Name der Klasse ausgegeben (in unserem Fall java.lang.String).
  • Nach dem @-Symbol wird der Hashcode des Objekts ausgegeben.

Wie drucke ich Objekte?

Wollen wir das Objekt und seine Eigenschaften in einem anderen Format ausgeben, dann müssen wir die Methode toString() in unserer Klasse überschreiben. Diese Methode sollte eine Zeichenkette zurückgeben. Lassen Sie uns diese Methode in unserer Student-Klasse überschreiben und den Prozess verstehen.

class Student {
  private String studentName;
  private int regNo;
  private Double gpa;
  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
  // overriding the toString() method
  @Override
  public String toString() {
    return this.studentName + " " + this.regNo + " " + this.gpa;
  }
}

Jetzt können wir den Namen des Schülers, die Registrierungsnummer und den Notendurchschnitt anzeigen, wenn wir ein Objekt dieser Klasse drucken.

public class Demo {
  public static void main(String[] args) {
    Student s1 = new Student("Justin", 101, 8.81);
    System.out.print(s1);
  }
}

Ausgabe:

Justin 101 8.81

Array-Objekt drucken

Wir müssen die Methode Arrays.toString() verwenden, um die in einem Array vorhandenen Elemente anzuzeigen. Beachten Sie, dass, wenn wir ein Array von benutzerdefinierten Klassenobjekten haben, die benutzerdefinierte Klasse auch eine überschriebene Methode toString() haben sollte. Dadurch wird sichergestellt, dass die Klasseneigenschaften korrekt gedruckt werden.

import java.util.Arrays;
class Student {
  private String studentName;
  private int regNo;
  private Double gpa;
  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
  // overriding the toString() method
  @Override
  public String toString() {
    return this.studentName + " " + this.regNo + " " + this.gpa;
  }
}
public class Demo {
  public static void main(String[] args) {
    Student s1 = new Student("Justin", 101, 8.81);
    Student s2 = new Student("Jessica", 102, 9.11);
    Student s3 = new Student("Simon", 103, 7.02);

    // Creating Arrays
    Student[] studentArr = {s1, s2, s3};
    int[] intArr = {5, 10, 15};
    double[] doubleArr = {5.0, 10.0, 15.0};
    String[] stringArr = {"Justin", "Jessica"};

    System.out.println("Student Array: " + Arrays.toString(studentArr));
    System.out.println("Intger Array: " + Arrays.toString(intArr));
    System.out.println("Double Array: " + Arrays.toString(doubleArr));
    System.out.println("String Array: " + Arrays.toString(stringArr));
  }
}

Ausgabe:

Student Array: [Justin 101 8.81, Jessica 102 9.11, Simon 103 7.02]
Intger Array: [5, 10, 15]
Double Array: [5.0, 10.0, 15.0]
String Array: [Justin, Jessica]

Mehrdimensionales Array-Objekt drucken

Verwenden Sie für mehrdimensionale Arrays die Methode deepToString() anstelle der Methode toString() und erhalten Sie die gewünschte Ausgabe an die Konsole.

import java.util.Arrays;
class Student {
  private String studentName;
  private int regNo;
  private Double gpa;

  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
  // overriding the toString() method
  @Override
  public String toString() {
    return this.studentName + " " + this.regNo + " " + this.gpa;
  }
}
public class Demo {
  public static void main(String[] args) {
    Student s1 = new Student("Justin", 101, 8.81);
    Student s2 = new Student("Jessica", 102, 9.11);
    Student s3 = new Student("Simon", 103, 7.02);
    Student s4 = new Student("Harry", 104, 8.0);
    Student[][] twoDimStudentArr = {{s1, s2}, {s3, s4}};
    System.out.println("Using toString(): " + Arrays.toString(twoDimStudentArr));
    System.out.println("Using deepToString(): " + Arrays.deepToString(twoDimStudentArr));
  }
}

Ausgabe:

Using toString(): [[LStudent;@7a81197d, [LStudent;@5ca881b5]
Using deepToString(): [[Justin 101 8.81, Jessica 102 9.11], [Simon 103 7.02, Harry 104 8.0]]

Sammlungsobjekte in Java drucken

Sammlungen wie Lists, Sets und Maps benötigen keine zusätzliche Methode wie Arrays.toString(). Wenn wir die Methode toString() unserer Klasse richtig überschrieben haben, erhalten wir durch einfaches Drucken der Sammlung die gewünschte Ausgabe.

import java.util.ArrayList;
import java.util.HashSet;
class Student {
  private String studentName;
  private int regNo;
  private Double gpa;
  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
  // overriding the toString() method
  @Override
  public String toString() {
    return this.studentName + " " + this.regNo + " " + this.gpa;
  }
}
public class Demo {
  public static void main(String[] args) {
    Student s1 = new Student("Justin", 101, 8.81);
    Student s2 = new Student("Jessica", 102, 9.11);
    Student s3 = new Student("Simon", 103, 7.02);

    // Creating an ArrayList
    ArrayList<Student> studentList = new ArrayList<>();
    studentList.add(s1);
    studentList.add(s2);
    studentList.add(s3);
    // Creating a Set
    HashSet<Student> studentSet = new HashSet<>();
    studentSet.add(s1);
    studentSet.add(s2);
    studentSet.add(s3);
    System.out.println("Student List: " + studentList);
    System.out.println("Student Set: " + studentSet);
  }
}

Ausgabe:

Student List: [Justin 101 8.81, Jessica 102 9.11, Simon 103 7.02]
Student Set: [Simon 103 7.02, Justin 101 8.81, Jessica 102 9.11]

Verwenden der Apache Commons-Bibliothek

Wenn Sie mit der Apache Commons-Bibliothek arbeiten, dann verwenden Sie die Klasse ToStringBuilder der Apache Commons-Bibliothek, um unser Objekt auf unterschiedliche Weise zu formatieren. Wir können die Methode reflectionToString() dieser Klasse verwenden.

Mit dieser Methode können wir einfach die Objektklasse und den Hashcode und die für die Eigenschaften festgelegten Werte ausgeben.

import org.apache.commons.lang3.builder.ToStringBuilder;
class Student {
  private String studentName;
  private int regNo;
  private Double gpa;
  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
  @Override
  public String toString() {
    return ToStringBuilder.reflectionToString(this);
  }
}
public class Demo {
  public static void main(String[] args) {
    Student s = new Student("Justin", 101, 8.81);
    System.out.print(s);
  }
}

Ausgabe:

Student@25f38edc[gpa=8.81,regNo=101,studentName=Justin]

Wenn wir den Hashcode weglassen möchten, können wir die Konstante SHORT_PREFIX_STYLE verwenden. Siehe das Beispiel unten.

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

class Student {
  private String studentName;
  private int regNo;
  private Double gpa;

  Student(String s, int i, Double d) {
    this.studentName = s;
    this.regNo = i;
    this.gpa = d;
  }
  @Override
  public String toString() {
    return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  }
}
public class Demo {
  public static void main(String[] args) {
    Student s = new Student("Justin", 101, 8.81);
    System.out.print(s);
  }
}

Ausgabe:

Student[gpa=8.81,regNo=101,studentName=Justin]

Wenn unsere Klasse verschachtelte Objekte enthält, können wir die Methode RecursiveToStringStyle() verwenden, um Objekte zu drucken.

@Override
public String toString() {
  return ToStringBuilder.reflectionToString(this, new RecursiveToStringStyle());
}

Zusammenfassung

Die Klasse Object ist die Oberklasse aller Klassen in Java. Die Methode toString(), die beim Drucken eines Objekts aufgerufen wird, ist in der Klasse Object implementiert. Diese Implementierung gibt jedoch keine Informationen über die benutzerdefinierten Klasseneigenschaften. Um diese Eigenschaften richtig anzuzeigen, müssen wir die Methode toString() unserer Klasse überschreiben. Für Arrays können wir direkt die Methode toString() oder deepToString() verwenden.

Verwandter Artikel - Java Object