Imprimer des objets en Java

Mohammad Irfan 12 octobre 2023
  1. Comprendre la sortie de l’objet
  2. Imprimer un objet en Java
  3. Objets de tableaux
  4. Comment imprimer des objets ?
  5. Imprimer l’objet tableau
  6. Imprimer un objet tableau multidimensionnel
  7. Imprimer des objets de collection en Java
  8. Utilisation de la bibliothèque Apache Commons
  9. Sommaire
Imprimer des objets en Java

Ce didacticiel présente comment imprimer un objet en Java et répertorie quelques exemples de codes pour comprendre le sujet.

Un objet est une instance d’une classe, et nous pouvons l’utiliser pour accéder aux propriétés et méthodes de la classe. Mais si nous essayons d’imprimer un objet à l’aide de la méthode System.out.println(), nous pouvons ne pas obtenir le résultat attendu. Nous imprimons souvent les propriétés de l’objet pour déboguer et nous assurer que tout fonctionne correctement. Dans ce tutoriel, nous allons apprendre à imprimer les propriétés d’un objet en Java.

Comprendre la sortie de l’objet

A propos des objets

  • Essayons de comprendre ce qui se passe quand on imprime un objet. Lorsque nous appelons la méthode System.out.print(), alors la méthode toString() de la classe Object est invoquée.
  • Comme on le sait, toutes les classes en Java étendent la classe Object. Ainsi, la méthode toString() peut être appliquée à n’importe quelle instance de n’importe quelle classe.
  • Cette méthode renvoie une chaîne composée du nom de la classe et du hashcode de l’objet. Ces deux sont reliés par le symbole @.

Imprimer un objet en Java

Créons une nouvelle classe et essayons d’imprimer ses objets.

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);
  }
}

Production:

Student@7a81197d
Student@5ca881b5

La première partie de la sortie affiche le nom de la classe (Student dans ce cas), et la deuxième partie montre un hashcode unique pour l’objet. Nous obtiendrons un hashcode différent à chaque fois que nous exécuterons le code ci-dessus.

Objets de tableaux

Un tableau est également un objet en Java, et nous n’obtenons pas ses éléments lorsque nous essayons d’imprimer un tableau sur la console. Exécutons le code suivant et visualisons sa sortie.

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);
  }
}

Production:

Integer Array:[I@36baf30c
Double Array:[D@7a81197d
Char Array:[C@5ca881b5
String Array:[Ljava.lang.String;@24d46ca6
2D Array:[[I@4517d9a3
  • Les crochets indiquent la dimension du tableau. Pour 1-D-array, un seul crochet ouvrant sera imprimé. Pour le tableau 2-D, nous avons deux crochets.
  • Le caractère suivant après le crochet indique ce qui est stocké dans le tableau. Pour le tableau d’entiers, un I est imprimé. Pour le tableau char, la lettre C est imprimée.
  • Le L pour le tableau de chaînes indique que le tableau contient des objets d’une classe. Dans de tels cas, le nom de la classe est affiché à côté (java.lang.String dans notre cas).
  • Après le symbole @, le hashcode de l’objet est imprimé.

Comment imprimer des objets ?

Si nous voulons imprimer l’objet et ses propriétés dans un format différent, nous devons alors surcharger la méthode toString() dans notre classe. Cette méthode doit retourner une chaîne. Remplaçons cette méthode dans notre classe Student et comprenons le processus.

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;
  }
}

Maintenant, nous pouvons voir le nom de l’élève, son numéro d’inscription et sa moyenne cumulative lorsque nous imprimons un objet de cette classe.

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

Production:

Justin 101 8.81

Imprimer l’objet tableau

Nous devons utiliser la méthode Arrays.toString() pour afficher les éléments présents dans un tableau. Notez que si nous avons un tableau d’objets de classe définis par l’utilisateur, la classe définie par l’utilisateur doit également avoir une méthode toString() surchargée. Cela garantira que les propriétés de la classe sont correctement imprimées.

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));
  }
}

Production:

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]

Imprimer un objet tableau multidimensionnel

Pour un tableau multidimensionnel, utilisez la méthode deepToString() au lieu de la méthode toString() et obtenez la sortie souhaitée sur la console.

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));
  }
}

Production:

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

Imprimer des objets de collection en Java

Les collections telles que Lists, Sets et Maps n’ont besoin d’aucune méthode ajoutée comme Arrays.toString(). Si nous avons correctement remplacé la méthode toString() de notre classe, le simple fait d’imprimer la collection nous donnera la sortie souhaitée.

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);
  }
}

Production:

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]

Utilisation de la bibliothèque Apache Commons

Si vous travaillez avec la bibliothèque Apache Commons, utilisez la classe ToStringBuilder de la bibliothèque Apache Commons pour formater notre objet de différentes manières. Nous pouvons utiliser la méthode reflectionToString() de cette classe.

Nous pouvons simplement imprimer la classe d’objet et le code de hachage et les valeurs définies pour les propriétés à l’aide de cette méthode.

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);
  }
}

Production:

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

Si nous voulons omettre le hashcode, nous pouvons utiliser la constante SHORT_PREFIX_STYLE. Voir l’exemple ci-dessous.

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);
  }
}

Production:

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

Si notre classe contient des objets imbriqués, nous pouvons utiliser la méthode RecursiveToStringStyle() pour imprimer des objets.

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

Sommaire

La classe Object est la superclasse de toutes les classes de Java. La méthode toString(), invoquée lors de l’impression d’un objet, est implémentée dans la classe Object. Mais cette implémentation ne donne aucune information sur les propriétés de classe définies par l’utilisateur. Pour afficher correctement ces propriétés, nous devons surcharger la méthode toString() de notre classe. Pour les tableaux, on peut directement utiliser la méthode toString() ou la deepToString().

Article connexe - Java Object