Menu
CoddyTech

toString() 方法

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 41 课,共 87 课。

Java 中的每个类都继承自 Object 类,它提供了几个实用的方法。最常被重写的方法之一是 toString(),它会返回对象的字符串表示形式。

默认情况下,toString() 会返回类名,后面跟着对象的哈希码,这并没有太大帮助:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Person p = new Person("Alice", 25);
System.out.println(p);  // Person@15db9742

通过重写 toString(),你可以提供有意义的输出,用来描述对象的状态:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Person[name=" + name + ", age=" + age + "]";
    }
}

Person p = new Person("Alice", 25);
System.out.println(p);  // Person[name=Alice, age=25]

打印对象或将对象与字符串拼接时,会自动调用 toString() 方法。这样调试会容易得多,因为你无需编写额外的代码,就能快速查看对象的内容。

challenge icon

挑战

简单

让我们构建一个商品库存系统,通过自定义的 toString() 实现来显示商品的有用信息。你将创建一个 Product 类,重写默认的 toString() 方法,为每件商品提供清晰易读的表示形式。

你将把代码分成两个文件:

  • Product.java:创建一个表示库存商品的类。每个 Product 都有三个私有字段:name(String)、price(double)和 quantity(int)。添加一个用于初始化这三个字段的构造函数。重写 toString() 方法,使其返回以下确切格式的字符串:Product[name=X, price=Y, quantity=Z],其中 X、Y 和 Z 是对应字段的实际值。价格应显示为普通数字(无需特殊格式)。
  • Main.java:通过创建并显示商品,让你的 Product 类发挥作用。你将收到三个输入:商品名称(String)、价格(double)和数量(int)。使用这些值创建一个 Product,然后直接使用 System.out.println() 打印该商品对象。由于你重写了 toString() 方法,程序会自动显示格式化后的商品信息,而不是难以理解的默认输出!

你将收到三个输入:商品名称(String)、价格(double)和数量(int)。

注意,直接打印对象时会自动调用你的 toString() 方法。这能让实际应用中的调试和日志记录变得轻松得多!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        String name = scanner.nextLine();
        double price = scanner.nextDouble();
        int quantity = scanner.nextInt();
        
        // TODO:用输入的值创建一个 Product 对象
        
        // TODO:直接打印 Product 对象
        // (这会自动调用你的 toString() 方法!)
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Java 在线编译器