- 浏览: 296358 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zh554275855:
1 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定 ...
抽象类和接口的区别,使用场景 -
MeowPass:
[color=red][size=xx-large][alig ...
java 字符串split有很多坑,使用时请小心!! -
jayzc1234:
讲的很好 看头像还是个女的 真是牛逼
WEBX学习总结 -
wodexiang:
写的什么狗屎
jetty启动以及嵌入式启动 -
繁星水:
很好,感谢分享与总结,谢谢!
jetty启动以及嵌入式启动
父类可序列化子类可序列化否乎?
- 博客分类:
- java基础
关于这个问题,写了个简单的代码测试了下:
可序列化的类Father
不可序列化的类Mother
子类Son继承了父类Father
运行结果
由此证明父类可序列化子类也可序列化,而sn.getUnserialize()为null是因为子类里将它定义为了transient 类型的,所以子类的属性可否序列化取决于如何定义。
现在我们在子类里加入Mother类的引用
运行结果:
吼吼,出错鸟~Mother类不支持序列化哈~~~
可序列化的类Father
package com.taobao.test; import java.io.Serializable; /** * @author tina.wyn * */ public class Father implements Serializable { private static final long serialVersionUID = 1L; private Integer fatherage; private String str; public Father() { fatherage = 50; str = "I am father"; } public Integer getNumber() { return fatherage; } public void setNumber(Integer number) { this.fatherage = number; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } }
不可序列化的类Mother
package com.taobao.test; public class Mother { private Integer matherage; private String str; public Mother(){ matherage = 30; str = "I am mother"; } public Integer getMatherage() { return matherage; } public void setMatherage(Integer matherage) { this.matherage = matherage; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } }
子类Son继承了父类Father
package com.taobao.test; /** * @author tina.wyn * */ public class Son extends Father { private static final long serialVersionUID = 1L; private int age; private transient String unserialize; public Son() { age = 10; unserialize = "hi"; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUnserialize() { return unserialize; } public void setUnserialize(String unserialize) { this.unserialize = unserialize; } }
package com.taobao.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * @author tina.wyn * */ public class TestSerialize { public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { Son s = new Son(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("hello"))); objectOutputStream.writeObject(s); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("hello"))); Son sn = (Son) objectInputStream.readObject(); System.out.println(sn.getAge()); System.out.println(sn.getNumber()); System.out.println(sn.getStr()); System.out.println(sn.getUnserialize()); } }
运行结果
10 50 I am father null
由此证明父类可序列化子类也可序列化,而sn.getUnserialize()为null是因为子类里将它定义为了transient 类型的,所以子类的属性可否序列化取决于如何定义。
现在我们在子类里加入Mother类的引用
package com.taobao.test; /** * @author tina.wyn * */ public class Son extends Father { private static final long serialVersionUID = 1L; private int age; private transient String unserialize; Mother mother; public Son() { mother = new Mother(); age = 10; unserialize = "hi"; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUnserialize() { return unserialize; } public void setUnserialize(String unserialize) { this.unserialize = unserialize; } public Mother getMother() { return mother; } public void setMother(Mother mother) { this.mother = mother; } }
运行结果:
Exception in thread "main" java.io.NotSerializableException: com.taobao.test.Mother at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) at com.taobao.test.TestSerialize.main(TestSerialize.java:21)
吼吼,出错鸟~Mother类不支持序列化哈~~~
发表评论
-
多线程重要方法的使用
2013-09-21 22:08 1483首先讲一下进程和线程的区别: 进程:每个进程都有 ... -
最容易被忽视的基础异常
2013-04-19 15:23 0result = getShopGroupDOList(req ... -
泛型的几个注意点!
2013-03-03 20:45 5329[size=medium]上周代码里碰 ... -
java 字符串split有很多坑,使用时请小心!!
2012-12-19 11:13 84383System.out.println(":ab: ... -
SimpleDateFormat多线程问题
2012-12-12 11:04 1049之前在写控制双12开关的函数时遇到了SimpleDateFor ... -
webx框架之RundataService
2012-07-12 22:37 1393之前对webx的学习都是有关响应和处理请求的流程和源码实现,配 ... -
一个简单的test
2012-06-25 21:46 1070public class UrlTest { publ ... -
java.io学习总结
2012-06-18 00:33 9691我将按照基类的顺序:InputStream、OutPutStr ... -
HashMap源码学习分享心得
2012-06-01 14:58 1435[size=medium]今早在团队内分享了<通过 Ha ... -
System.arraycopy
2012-05-28 18:43 1398在JAVA里面,可以用复制 ... -
System类解析
2012-05-24 16:18 0System类是final类,无法被继承,包含一些有用的类字段 ... -
一个简单的Java(string)截取图片的后缀程序
2012-05-03 16:05 9314Java代码 public static String ... -
jboss启动时异常
2012-03-15 14:01 1555今天在启动jboss之前改动了一下它的jboss-servic ... -
理解ServletContext与ServletConfig
2011-11-23 16:44 1957javax.servlet Interface S ... -
Java 类中类属性 (static 变量) 和对象属性 (非 static 变量) 的初始化顺序
2011-11-20 18:25 1689Java 类中类属性 (static 变量) 和对象属 ... -
collectio接口的总结
2011-09-01 09:44 1151Map接口: | + -- WeakHashM ... -
JAVA中SERIALVERSIONUID的解释
2011-08-29 09:56 1065serialVersionUID作用: ... -
Java语法总结 - 内部类
2011-08-24 16:41 881从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论 ... -
java枚举类型
2011-08-22 18:46 978public class TestEnum { /*最 ... -
抽象类和接口的区别,使用场景
2011-08-18 15:16 21331抽象类和接口的区别,使用场景 1 接口是核心,其定义了要做 ...
相关推荐
1. 什么是 Java 序列化,如何实现 Java 序列化? Java 序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。为了实现 Java 序列化,需要将需要被序列化的类实现 Serializable 接口,然后使用...
- **构造函数**:`A(int b, float c)`接收两个参数,用于初始化子类特有的成员变量`x`以及继承自父类的`n`。 - **成员方法**:`fun1()`通过调用父类的`fun()`方法并乘以`x`来计算新的序列值。 ### 三、定义另一个子...
- 实现序列化,只需让类实现`Serializable`接口,Java会自动处理序列化和反序列化。 14. **在COLLECTION框架中实现比较要实现的接口** 如果要在集合框架中进行比较,一般需要实现`Comparable<T>`接口或使用`...
6. 什么是Java序列化,如何实现Java序列化? Java序列化是将对象转换为字节流的过程,便于存储或在网络上传输。实现序列化需让类实现`java.io.Serializable`接口。例如: ```java class MyClass implements ...
这种情况下,C#会确保在`Child2`类的静态字段初始化之前,先完成`Base2`类的所有静态初始化。因此,输出会显示出父类的静态字段和构造函数先于子类的相应部分执行。 **情况2:子类静态构造函数中使用父类静态字段**...
- `write` 和 `readFields`:实现Writable接口,用于序列化和反序列化Task对象。 - `localizeConfiguration`:将Task相关信息存入JobConf,便于参数传递。 4. **任务生命周期相关函数** - `done...
东软 Java 笔试题答案 本资源提供了 Java 笔试题答案,涵盖了面向... 实例化子类对象要看父类 知识点:继承、父类、子类、实例化对象 12. 下面程序运行的结果是 A. Base 知识点:继承、父类构造函数、子类构造函数
在子类实例化时,会先实例化父类的部分,然后实例化子类特有的部分。 - 子类可以通过重写方法来提供不同的实现。 - 上转型指的是父类引用指向子类对象。这种情况下,只能访问父类中定义的方法和属性。 - **多态**...
- 类初始化按照继承层次结构从父类到子类依次进行。 - 静态成员先于实例成员初始化。 **普通代码块、静态代码块、构造代码块的区别** - 普通代码块在构造函数调用时执行。 - 静态代码块只执行一次,在类加载时执行...
当实例化子类时,会调用父类的构造方法,体现了继承的传递性。 17. **final关键字**:final可以修饰类、方法和变量。final类不能被继承,final方法不能被重写,但final变量一旦赋值就不能改变。 18. **访问修饰符*...
- 子类实例化过程中,首先初始化父类变量,调用父类构造函数,随后初始化子类变量,最后生成子类实例。 6. **构造函数中避免初始化其他类** - 构造函数中尽量避免创建或初始化其他类的对象,以减少耦合度。 7. ...
UVM(Universal Verification Methodology)是一种广泛用于系统级验证的框架,它提供了组件化、可重用和可扩展的方法来构建验证环境。本篇文章将深入探讨UVM的基础知识,特别是关于组件创建和配置管理的方面。 首先...
总结一下,`__init__()` 是一个初始化方法,而 `super()` 是一个函数,用于在多继承中调用父类(或祖先类)的方法。`super()` 自动处理MRO,确保正确地沿着继承链调用初始化方法,避免了手动管理父类调用的复杂性。...
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................