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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-4-5 11:10  /  1807 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-4-5 12:03 编辑

实例功能:通过ObjectOutputStream类保存一个学生对象的信息,再通过ObjectInputStream类把学生信息读取出来

文件一:
  1. import java.io.*;      -----------------------------------------》代码1
  2. //import java.io.Serializable;-----------------------------------------》代码2
  3. public class SerializableTest implements Serializable {       
  4.         int ID;  String name;  int age;  String department;
  5.         public SerializableTest(int ID,String name,int age,String department) {
  6.                 this.ID = ID;  this.name = name;  this.age = age;  this.department = department;
  7.         }
  8.         public String toString() {
  9.                 return "ID:" + ID + ",姓名: " + name + ",年龄: " + age + "," + department + "系";
  10.         }
  11. }
复制代码
文件二:
  1. import java.io.*;
  2. public class Serializable {
  3.         public static void main(String args[]) throws Exception {
  4.                
  5.                 SerializableTest stu1 = new SerializableTest(1,"戴振良",25,"Java软件开发");
  6.                 SerializableTest stu2 = new SerializableTest(2,"戴竹飞",21,".NET软件开发");
  7.                
  8.                 FileOutputStream fos = new FileOutputStream("student.txt");
  9.                 ObjectOutputStream oos = new ObjectOutputStream(fos);
  10.                 oos.writeObject(stu1);
  11.                 oos.writeObject(stu2);
  12.                 oos.close();
  13.                
  14.                 FileInputStream fis = new FileInputStream("student.txt");
  15.                 ObjectInputStream ois = new ObjectInputStream(fis);
  16.                 SerializableTest stu3 = (SerializableTest)ois.readObject();
  17.                 SerializableTest stu4 = (SerializableTest)ois.readObject();
  18.                 ois.close();
  19.                
  20.                 System.out.println(stu3);
  21.                 System.out.println(stu4);               
  22.                
  23.         }       
  24. }
复制代码
第一次我在文件一用的是“代码1“,运行通过了,然后我修改了一下toString方法,结果运行就不通过了,显示的异常信息为:

然后就是我怎么改回去之前的代码都通不过了,千找万找找不到原因{:soso_e111:} ,最后我把导入的语句改用“代码2”,嘿,通过了,实在是想不明白是为什么?我看的是张孝详老师的视频,他的就是用“代码1”的,而且运行正常,为什么我的不行?哪位高人指点指点啊!不信可以复制代码试一下

6 个回复

正序浏览
原来如此,学习了!谢谢大家{:soso__2073051188725282950_2:}
回复 使用道具 举报
import 当你写上绝对的文件地址是他就只会去哪个地址上找哪个文件。。而如果用.*方式。他会在当前目录上找,找不到才会去你所指定的目录上找。。。。。因为你的类同名了 。。所以找的是你自己的写的类。。。。
回复 使用道具 举报
戴振良 发表于 2012-4-5 12:02
原来如此,竟然犯这么低级的错误  ,可是为什么我用代码2就又可以了呢?{: ...

代码2相当于绝对路径了,直接去找java.io.Serializable了
回复 使用道具 举报
本帖最后由 戴振良 于 2012-4-5 12:06 编辑

原来如此,竟然犯这么低级的错误{:soso__9479475555278606121_2:}  ,可是为什么我用代码2就又可以了呢?{:soso_e132:},不信可以试试。
回复 使用道具 举报
   你文件2的定义类Serializable和 java.io.Serializable 同名了。
  文件1导入的包 java.io.*; 则找到了文件2的Serializable 类去了,所以报下面的错。
  你文件2类名改下,就没事了。
回复 使用道具 举报
   你文件2的定义类Serializable和 java.io.Serializable 同名了。
  文件1导入的包 java.io.*; 则找到了文件2的Serializable 类去了,所以报下面的错。
  你文件2类名改下,就没事了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马