toString() 方法介绍
toString()是Object类中的一个方法,而java中的所有类都继承自Object类,因此每个类中都有toString()方法,以下是toString()方法的源码:public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
可以看出,java的原生toString()方法返回的是类名 + "@" + 类对象的哈希code码
。
为什么要重写 toString() 方法?
当我们想要让一个对象被输出到显示器的时候,往往调用一个对象的toString()方法,将对象的内容转换为字符串,而类名 + "@" + 类对象的哈希code码
不能很好的代表每一个对象,所以我们要重写toString()方法。
以下情况也会自动调用toString()方法:
System.out.println( 对象名 );
重写 toString() 方法的规范
- 必须被声明为
public
。 - 返回类型为
String
。 - 方法的名称必须为toString,且
无参数
。 - 方法体中不要使用输出方法
System.out.println()
。
重写toString()实例
假设有一个User类,类中有三个String私有属性: id
, name
, gender
,三个属性都有setter和getter方法。public class User {
private String id;
private String name;
private String gender;
public User()
{
//无参构造函数
}
public User(String inId,String inName,String inGender)
{
//有参构造函数
this.id = inId;
this.name = inName;
this.gender = inGender;
}
//getter and setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
//end getter and setter
}
在TestUser类中对这个类进行调用测试User继承自Object类的原生toString()方法:import java.util.*;
public class TestUser {
public static void main(String [] args)
{
//创建User类的简单实例
User userOne = new User("1","One","Boy");
User userTwo = new User("2","Two","Girl");
User userThree = new User("3","Three","Boy");
//使用System.out.println( 对象名.toString() )手动调用
System.out.println( userOne.toString() );
System.out.println( userTwo.toString() );
//直接使用System.out.println( 对象名 )自动调用
System.out.println( userThree );
}
}
运行结果为:lesson08.User@610455d6
lesson08.User@511d50c0
lesson08.User@60e53b93
重写User类的toString()方法后:public class User {
private String id;
private String name;
private String gender;
public User()
{
//无参构造函数
}
public User(String inId,String inName,String inGender)
{
//有参构造函数
this.id = inId;
this.name = inName;
this.gender = inGender;
}
public String toString()
{
return ( this.getClass().getName()+",ID:"+getId()+",Name:"+getName()+",Gender:"+getGender() );
}
/*以下重复代码省略
getter and setter
...
...
...
end getter and setter*/
}
再次执行TestUser类运行结果为:lesson08.User,ID:1,Name:One,Gender:Boy
lesson08.User,ID:2,Name:Two,Gender:Girl
lesson08.User,ID:3,Name:Three,Gender:Boy
可以看到重写toString()方法已经生效,以上便是有关toString()方法的全部记录。