12.2 方法toString
创建新类的第一步是声明实例变量和编写构造函数。接下来该干什么呢?一种不错的选择是编写方法 toString,这对调试和渐进开发大有帮助。
要想以易于阅读的方式显示 Card 对象,需要将整数编码映射到字符串。为此,一种比较自然的方式是使用一个 String 数组。我们可以像下面这样创建这个数组:
String[] suits = new String[4];
然后给每个元素赋值:
suits[0] = "Clubs";suits[1] = "Diamonds";suits[2] = "Hearts";suits[3] = "Spades";
我们也可像 8.3 节那样,在创建数组的同时初始化元素:
String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
图 12-1 所示的状态图显示了结果。每个元素都是一个指向 String 的引用。

图 12-1:一个字符串数组的状态图
我们还需要一个对点数进行解码的数组:
String[] ranks = {null, "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
有效的点数为 1~13,因此根本不会用到索引为 0 的元素。我们将它设置为 null,表明这个元素不会被用到。
通过将实例变量 suit 和 rank 用作索引,可从这些数组中提取有意义的字符串。
String s = ranks[card.rank] + " of " + suits[card.suit];
表达式 suits[card.suit] 表示将对象 card 的实例变量 suit 用作索引,以访问数组 suits 中的相应元素。
现在可以将这些代码封装到方法 toString 中了:
public String toString() {String[] ranks = {null, "Ace", "2", "3", "4", "5", "6","7", "8", "9", "10", "Jack", "Queen", "King"};String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};String s = ranks[this.rank] + " of " + suits[this.suit];return s;}
当我们显示 Card 对象时,println 将自动调用 toString:
Card card = new Card(11, 1);System.out.println(card);
输出为 Jack of Diamonds。
