java学习笔记_序列化

如果父类没有实现Serializable接口,子类实现了Serializable接口,那么子类是可以序列化的。

但是如果想要反序列化,那么就需要父类支持默认构造函数。

因为在反序列化的过程中不会调用子类的构造函数,而会以不带参数的形式调用父类的构造函数。

1 public class dog {
2     public dog(String n) { name = n; }
3     public dog() { name = ""; }
4     public String name;
5 }
 1 import java.io.*;
 2
 3 public class snoopy extends dog implements Serializable {
 4     public int age;
 5     public snoopy(String n, int a) {
 6         super(n);
 7         System.out.println("Constr...");
 8         System.out.println(n);
 9         if ("" == n) {
10             System.out.println("empty");
11         }
12         age = a;
13     }
14
15     public static void main(String[] args) {
16         snoopy sn = new snoopy("Snoopy", 5);
17
18         try {
19             FileOutputStream fs = new FileOutputStream("snoopy.ser");
20             ObjectOutputStream os = new ObjectOutputStream(fs);
21             os.writeObject(sn);
22             os.close();
23
24             ObjectInputStream is = new ObjectInputStream(new FileInputStream("snoopy.ser"));
25             System.out.println("Begin---");
26             snoopy s = (snoopy) is.readObject();
27
28         } catch(Exception ex) {
29             ex.printStackTrace();
30         }
31     }
32 }
时间: 2024-08-01 10:40:42

java学习笔记_序列化的相关文章

java学习笔记 对象序列化

对象序列化就是把一个对象变为二进制数据流的一种方法.如果一个类的对象想被序列化,它要实现Serializable接口,这个接口是个标识接口(只定义了接口,并没有定义方法),表示这个对象具有被序列化的能力. 实现Serializable接口之后,表示这个类具有被数据流传输的能力,如果想进行输入和输出,要使用两个类:ObjectOutputStream 和 ObjectInputStream 序列化时,只有属性被序列化 如果一个对象的某个属性不希望被序列化,可以使用transient关键字声明(把这

Java学习笔记_网络(2)

单向的客户端发送服务器端接收并显示,没有使用多线程 1 import javax.swing.*; 2 import java.awt.*; 3 import java.io.*; 4 import java.net.*; 5 import java.awt.event.*; 6 7 public class ChatClient { 8 private JTextArea text_area; 9 private PrintWriter writer; 10 private Socket s;

Java学习笔记_网络+多线程

支持同时收发的客户端和服务器端 客户端 1 import javax.swing.*; 2 import java.awt.*; 3 import java.io.*; 4 import java.net.*; 5 import java.awt.event.*; 6 7 public class ChatClient { 8 private JTextArea incoming; 9 private JTextField outgoing; 10 private PrintWriter wri

java学习笔记_内存分析

程序执行时内存一般被分为4部分 代码区(code segment):存放代码 数据区(data segment):静态变量和字符串常量 栈(stack): 存放局部变量 堆(heap):动态生成内存(new出来的东西) 代码如下: public class Person{ int id; int age; Person(int _id,int _age){ id = _id; age = _age; } public static void main(String[] args){ Person

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Java 学习笔记(2015.7.20~24)

Java 学习笔记(2015.7.20~24) Java Java 学习笔记(2015.7.20~24) 1.StringBuffer与StringBuilder的区别: 2.基本数据类型包装类 3.Date.Calendar.DateFormat等与时间相关的类 1.常用类String 2.正则表达式 3.常用类 StringBuffer 代表可变的字符序列 拆箱与装箱 包装类的应用 匿名内部类 数组 day11 day12 day13 day14 day11 父类中使用public定义的方法

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对