日历

2008 7.5 Sat
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

日志分类

文章搜索

日志文章

2007年11月24日 13:49:01

JAVA基础之 容易忽视的toString()方法

1. 重写toString()方法

  Object类具有一个toString()方法,你创建的每个类都会继承该方法,它返回对象的一个String表示。当你要用对象的字符串表示时,系统会自动调用对象的toString()方法,这对于调试非常有帮助。下面让我们来先看一段代码:

public class ToStringTest{

  private String name;

  public ToStringTest(String name){

    this.name = name;

  }

  public void setName(String name){

    this.name = name;

  }

  public String getName(){

    return name;

  }

  public static void main(String[] args){

    ToStringTest test = new ToStringTest("sample");

    System.out.println(test);

  }

}

运行结果:  

  ToStringTest@1fc86be

这个结果看起来怪怪的,它显然不是我们想要的结果,我们的意思不是想要输出name的值吗?这是因为在默认(不重载)的情况下,toString()方法返回的结果格式为类名@对象的16进制Hash表示。要正确输出我们想要的结果,就必须重写这个toString()方法:

public class ToStringTest{

  private String name;

  public ToStringTest(String name){

    this.name = name;

  }

  public void setName(String name){

    this.name = name;

  }

  public String getName(){

    return name;

  }

  public String toString(){

    return name;

  }

  public static void main(String[] args){

    ToStringTest test = new ToStringTest("sample");

    System.out.println(test);

  }

}


再次运行结果:

  sample 


2. 在容器类中使用toString()

编写一个工具类,用于在控制台输出Iterator

import java.util.Iterator;

public class Printer{

  public void printAll(Iterator it){

    while(it.hasNext()){

      System.out.println(it.next());

    }

  }

}

Hamster类中重写父类的toString()方法。

public class Hamster{

  private int num;

  public Hamster(int num){

    this.num = num;

  }

  public String toString(){

    return "This is Hamster #" + num;

  }

}

HamsterMaze类中使用容器类加载Hamster类对象并输出结果。

import java.util.ArrayList;

import java.util.List;

public class HamsterMaze{

  public static void main(String[] args){

    List list = new ArrayList();

    for(int i=0; i<3; i++)

      list.add(new Hamster(i));

    Printer.printAll(list.iterator());

  }

}

运行结果:

  This is Hamster #0

  This is Hamster #1

  This is Hamster #2


3. 在JavaBean中实现toString()方法

  在作一个项目时发现,许多bean需要实现toString()方法,就实现一个通用的bean,然后通过其他继承即可。

import java.lang.reflect.Field;
public class BaseBean {
  public String toString() { 
    StringBuffer sb = new StringBuffer(); 
    try { 
      Class t = this.getClass(); 
      Field[] fields = t.getDeclaredFields(); 
      for (int i = 0; i < fields.length; i++) { 
        Field field = fields; 
        field.setAccessible(true); 
        sb.append("{"); 
        sb.append(field.getName()); 
        sb.append(":"); 
        if (field.getType() == Integer.class) { 
          sb.append(field.getInt(this)); 
        } else if (field.getType() == Long.class) { 
          sb.append(field.getLong(this)); 

        } else if (field.getType() == Boolean.class) { 
          sb.append(field.getBoolean(this)); 
        } else if (field.getType() == char.class) { 
          sb.append(field.getChar(this)); 
        } else if (field.getType() == Double.class) { 
          sb.append(field.getDouble(this)); 
        } else if (field.getType() == Float.class) { 
          sb.append(field.getFloat(this)); 
        } else 
          sb.append(field.get(this)); 
        sb.append("}"); 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 

    } 

    return sb.toString();
  }
}

编写测试类:

public class TestBean extends BaseBean {
  private int id;
  public int getId() {
     return id;
  }
  public void setId(int id) { 
    this.id = id;
  }
  public static void main(String[] args) { 
    TestBean testBean = new TestBean(); 
    testBean.setId(9); 
    System.out.println(testBean.toString());
  }
}


运行结果:

  {id:9}



Tags: Java   String   字符串  

类别: JAVA |  评论(0) |  浏览(1644) |  收藏
发表评论