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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵庆礼 中级黑马   /  2012-6-30 16:07  /  1807 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  赵庆礼 于 2012-7-5 11:42 编辑

import java.io.*;
class Person implements Serializable
{
    static final long serialVersionUID = 42L;
    String name;
    int age;
    Person( String name, int age )
    {
        this.name = name;
        this.age = age;
    }
    public String toString()//重写toString()方法
    {
        return name + "::" + age;
    }
}


import java.io.*;
class ObjectStreamDemo
{
    public static void main( String[] args ) throws Exception
    {
        //writeObj();
        readObj();
    }
    public static void readObj()throws Exception
    {
        ObjectInputStream sis = new ObjectInputStream( new FileInputStream( "obj.txt" ) );
        Person p = ( Person )sis.readObject();   
        System.out.println( p ); //  为什么在这只是直接打印了Person对象p,而没有调用Person中的重写方法toString(),不理解
        sis.close();
    }
    public static void writeObj()throws IOException
    {
        ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream( "obj.txt" ) );//文件名一般不存为txt,存为.class格式
        oos.writeObject( new Person( "zhangsan1", 331 ) );
        oos.close();
    }
}

看了毕老师的视频,虽然知道了结果,但是还是不理解其中的道理,哪位大侠帮我再仔细讲讲,谢谢
问题在代码中的红色字体

3 个回复

倒序浏览
打印对象时,会自动调用该对象的toString()方法。
回复 使用道具 举报
任何一个类都有toString()方法,当你调用system.out.println();的时候括号内的对象会自动调用它的toString()方法。如果你发现你的类中并没有toString()方法,那么当你打印该类的对象时,会调用父类的tostring方法,如果你没有继承任何类那么他会调用object类中的toString()方法。
回复 使用道具 举报
谢谢,我看明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马