黑马程序员技术交流社区

标题: 对象序列化问题 [打印本页]

作者: 赵庆礼    时间: 2012-6-30 16:07
标题: 对象序列化问题
本帖最后由  赵庆礼 于 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();
    }
}

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

作者: 孔令金    时间: 2012-6-30 18:16
打印对象时,会自动调用该对象的toString()方法。
作者: Forever。    时间: 2012-6-30 18:48
任何一个类都有toString()方法,当你调用system.out.println();的时候括号内的对象会自动调用它的toString()方法。如果你发现你的类中并没有toString()方法,那么当你打印该类的对象时,会调用父类的tostring方法,如果你没有继承任何类那么他会调用object类中的toString()方法。
作者: 赵庆礼    时间: 2012-7-5 11:41
谢谢,我看明白了




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