A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈浩 黑马帝   /  2011-12-24 09:49  /  2284 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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是包名);请问诸位能否解释一下?
  



   
}

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1 淡定

查看全部评分

4 个回复

倒序浏览
public String toString()
这个方法是覆写了父类的toString方法,方法名必须要一样。如果写成其他名,那就是你自己新定义的。

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
刘博 黑马帝 2011-12-24 10:08:28
藤椅
你可以看下Object类中的String方法,是默认打印地址的,所以要重写,如果你不重写打印的就会是地址;

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
输出时自动调用其toString()方法,如果改了名,本类没有toString方法时调用其父类的,依次往上找
我查了一下,其父类OutputStream也没覆写toString方法,再往上就是Object类
Object类toString方法的返回值为
getClass().getName() + '@' + Integer.toHexString(hashCode())
回复 使用道具 举报
陈浩 黑马帝 2011-12-24 15:36:05
报纸
谢谢各位!我懂了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马