日历

2008 8.30 Sat
     12
3456789
10111213141516
17181920212223
24252627282930
31      
«» 2008 - 8 «»

日志分类

文章搜索

日志文章

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 |  评论(1) |  浏览(1782) |  收藏
1楼 [匿名]ymwa9noe 2008年08月15日 13:18:32 Says:
%5Burl=http://www.lxwltg.com/%5D%E5%88%9B%E9%B8%BF%E8%BD%AF%E4%BB%B6%EF%BC%8C%E7%8E%B0%E5%9C%A8%E5%8F%AF%E4%BB%A5%E5%90%914200%E5%AE%B6%E5%9B%BD%E5%86%85%E5%88%86%E7%B1%BB%E4%BF%A1%E6%81%AF%E6%B8%AF%E5%8F%91%E5%B8%83%E4%BE%9B%E6%B1%82%E4%BF%A1%E6%81%AF%EF%BC%8C600%E5%AE%B6%E7%9A%84%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E7%99%BB%E9%99%86%EF%BC%8C800%E5%AE%B6%E7%9A%84%E9%BB%84%E9%A1%B5%E7%99%BB%E9%99%86%EF%BC%8C%E5%B9%B6%E4%B8%94%E5%8C%85%E6%8B%AC36000%E4%B8%AA%E5%90%84%E4%B8%AA%E7%B1%BB%E5%88%AB%E7%9A%84%E5%8F%AF%E5%8F%91%E5%B8%83%E5%95%86%E5%8A%A1%E4%BF%A1%E6%81%AF%E7%9A%84%E7%BB%BC%E5%90%88%E7%BD%91%E7%AB%99%E4%BF%A1%E6%81%AF%E5%B9%BF%E6%92%AD%E5%8A%9F%E8%83%BD%EF%BC%8C%E6%88%90%E5%8A%9F%E7%8E%87%E6%97%A0%E5%8F%AF%E6%AF%94%E6%8B%9F%EF%BC%8C%E9%AA%8C%E8%AF%81%E7%A0%81%E5%87%A0%E4%B9%8E%E5%81%9A%E5%88%B0%E4%BA%86%E5%85%A8%E8%87%AA%E5%8A%A8%E8%AF%86%E5%88%AB%EF%BC%8C%E8%87%AA%E5%8A%A8%E5%A1%AB%E5%86%99%EF%BC%81%E5%B9%B6%E4%B8%94%E5%A2%9E%E5%8A%A0%E4%BA%86%E6%AF%8F%E5%A4%A9%E6%88%96%E6%AF%8F%E5%91%A8%E6%88%96%E6%AF%8F%E6%9C%88%E5%85%A8%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E7%9A%84%E5%BC%BA%E5%A4%A7%E5%8A%9F%E8%83%BD%EF%BC%81%E6%97%A0%E9%9C
发表评论