用字符串输出对象

一、问题描述:

在使用如下的语句输出对象时,会出现一些人看不明白的代码

System.out.println(Object);

例如,如下代码:

import java.awt.Color;

public class Cat {
	private String name;           //这四个最好设置为private,防止混乱
	private int age;
	private int weight;
	private Color color;
	
	public Cat(String name,int age,int weight,Color color) {
		this.name=name;
		this.age=age;
		this.weight=weight;
		this.color=color;
	}
}


public class Test {

	public static void main(String[] args) {
		Cat cat1=new Cat("Java",12,21,Color.BLACK);
		Cat cat2=new Cat("C++",12,21,Color.WHITE);
		Cat cat3=new Cat("Java",12,21,Color.BLACK);
		
		System.out.println("猫咪1号:"+cat1);
		System.out.println("猫咪2号:"+cat2);
		System.out.println("猫咪3号:"+cat3);
		
	}

}

运行结果如下:


二、解决方案

首先,我们要弄清楚,System.out.println(Object)是怎么输出对象的;

查API的println(java.lang.Object)方法,可知此方法首先调用String.valueOf(Object)获取打印对象的字符串值;

再查public static String valueOf(Object object)方法,可知该方法中如果参数为null,则字符串等于null;否则返回obj.toString()的值。因此,我们只需要改写obj.toString()方法即可。


三、补充代码

public class Cat {
	private String name;           //这四个最好设置为private,防止混乱
	private int age;
	private int weight;
	private Color color;
	
	public Cat(String name,int age,int weight,Color color) {
		this.name=name;
		this.age=age;
		this.weight=weight;
		this.color=color;
	}
	
	public String toString() {
			StringBuilder sb=new StringBuilder();             //字符串生成器,可以随时增加、插入、删除字符串,避免了使用+号连接造成的问题
			sb.append("名字"+name+"\n");
			sb.append("年龄"+age+"\n");
			sb.append("重量"+weight+"\n");
			sb.append("颜色"+color+"\n");
			return sb.toString();                             //注意,这里的toString()方法是StringBuilder下的toString()方法,
			                                                 //而上面重写的toString()方法是Object类的toString()方法,二者不是一个类下的方法
		}
	
}

import java.awt.Color;

public class Test {

	public static void main(String[] args) {
		Cat cat1=new Cat("Java",12,21,Color.BLACK);
		Cat cat2=new Cat("C++",12,21,Color.WHITE);
		Cat cat3=new Cat("Java",12,21,Color.BLACK);
		
		System.out.println("猫咪1号:"+cat1);
		System.out.println("猫咪2号:"+cat1);
		System.out.println("猫咪3号:"+cat1);
		
	}

}

输出结果为:


备注:此问题的思考源于阅读《Java经典编程300例》

猜你喜欢

转载自blog.csdn.net/captainCZY/article/details/79703454
今日推荐