黑马程序员技术交流社区

标题: ObjectOutputStream 问题? [打印本页]

作者: 陈浩    时间: 2011-12-24 09:49
标题: ObjectOutputStream 问题?
本帖最后由 love风之吻浩 于 2011-12-24 16:03 编辑

我在运行ObjectOutputStream时碰到一点问题:
下面是代码:
import java.io.*;
public class OutputStreamDemo3 {
   public static void main(String []args)throws IOException,ClassNotFoundException
   {
            //writeobj();
            readobj();
   }
   /*public static void writeobj()throws IOException
   {
           ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("b.txt"));
           oos.writeObject(new People1("zhangsan",99));
           oos.close();
   }*/
   public static void readobj()throws IOException,ClassNotFoundException
   {
           ObjectInputStream ois=new ObjectInputStream(new FileInputStream("b.txt"));
           People1 p=(People1)ois.readObject();
           System.out.println(p);
           ois.close();
   }
下面是People1 的代码:
import java.io.*;
class People1 implements Serializable{
     private String name;
     private int age;
     People1(String name,int age)
     {
             this.name=name;
             this.age=age;
     }
     public String toString()
     {
             return name+":"+age;
     }

}
我感到比较奇怪的是,如果把这段代码中的toString()
public String toString()
     {
             return name+":"+age;
     }
替换成别的方法名,那么从主函数中打印的就不是zhangsan:99;
而是:day21.People1@fa7e74(day21是包名);请问诸位能否解释一下?
  



   
}
作者: 黑马巩伟伟    时间: 2011-12-24 09:56
public String toString()
这个方法是覆写了父类的toString方法,方法名必须要一样。如果写成其他名,那就是你自己新定义的。
作者: 刘博    时间: 2011-12-24 10:08
你可以看下Object类中的String方法,是默认打印地址的,所以要重写,如果你不重写打印的就会是地址;
作者: 王昌盛    时间: 2011-12-24 10:18
输出时自动调用其toString()方法,如果改了名,本类没有toString方法时调用其父类的,依次往上找
我查了一下,其父类OutputStream也没覆写toString方法,再往上就是Object类
Object类toString方法的返回值为
getClass().getName() + '@' + Integer.toHexString(hashCode())

作者: 陈浩    时间: 2011-12-24 15:36
谢谢各位!我懂了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2