|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
当一个父类完成Serializable接口后,他的子类都将主动的完成序列化。
以下考证了这一点:
packageSerial;
importjava.io.Serializable;
publicclassSuperCimplementsSerializable{//父类完成了序列化
intsupervalue;
publicSuperC(intsupervalue){
this.supervalue=supervalue;
}
publicStringtoString(){
return"supervalue:"+supervalue;
}
}
publicclassSubCextendsSuperC{//子类
intsubvalue;
publicSubC(intsupervalue,intsubvalue){
super(supervalue);
this.subvalue=subvalue;
}
publicStringtoString(){
returnsuper.toString()+"sub:"+subvalue;
}
}
publicclassTest1{
publicstaticvoidmain(String[]args){
SubCsubc=newSubC(100,200);
FileInputStreamin=null;
FileOutputStreamout=null;
ObjectInputStreamoin=null;
ObjectOutputStreamoout=null;
try{
out=newFileOutputStream("Test1.txt");//子类序列化
oout=newObjectOutputStream(out);
oout.writeObject(subc);
oout.close();
oout=null;
in=newFileInputStream("Test1.txt");
oin=newObjectInputStream(in);
SubCsubc2=(SubC)oin.readObject();//子类反序列化
System.out.println(subc2);
}catch(Exceptionex){
ex.printStackTrace();
}finally{
…此处省略
}
}
}
运转了局以下:
supervalue:100sub:200
可见子类乐成的序列化/反序列化了。
怎管让子类完成序列化看起来是一件很复杂的事变,但有的时分,常常我们不克不及够让父类完成Serializable接口,缘故原由是偶然候父类是笼统的(这并没有干系),而且父类不克不及够强迫每一个子类都具有序列化的才能。换句话说父类计划的目标仅仅是为了被承继。
要为一个没有完成Serializable接口的父类,编写一个可以序列化的子类是一件很贫苦的事变。javadocs中提到:
“Toallowsubtypesofnon-serializableclassestobeserialized,thesubtypemayassumeresponsibilityforsavingandrestoringthestateofthesupertypespublic,protected,and(ifaccessible)packagefields.Thesubtypemayassumethisresponsibilityonlyiftheclassitextendshasanaccessibleno-argconstructortoinitializetheclasssstate.ItisanerrortodeclareaclassSerializableifthisisnotthecase.Theerrorwillbedetectedatruntime.”
<p>
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) |
|