1,当需要被序列化的类对象中的一部分成员变量是不可被序列化的,会发生什么情况呢?
例如下面的的代码
public class Person implements Serializable {
private static final long serialVersionUID = 2356129180978015792L;
private String name;
private int age;
private Resume resume;
public Resume getResume() {
return resume;
}
public void setResume(Resume resume) {
this.resume = resume;
}
public Person() {
}
public Person(String str, int n) {
System.out.println("Inside Person's Constructor");
name = str;
age = n;
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
public class Resume {
private String work;
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
private String college;
}
public Person(String str, int n) {
System.out.println("Inside Person's Constructor");
name = str;
age = n;
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
执行以上的代码可以发现,当Person对象的resume被赋值之后,序列化时
会发生NotSerializableException。单就这一个问题,就带来了很大的复杂性。因为当一个
系统中的类定义很多的时候,很难判断某一个类成员是否是Serilizable的。
2,当JDK版本切换之后,序列化过程会不会出错。
答案:应该不会出错(未验证)
参见以下网址
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html
http://stackoverflow.com/questions/152757/is-java-object-serialization- compatible-between-1-5-and-1-6
3,transient关键字
被transient修饰的成员变量不会被序列化。当实例1中的resume被transient修饰的时候,就不会抛出NotSerializableException。
分享到:
相关推荐
5. **序列化框架**:除了标准的Java序列化机制,还有许多高级的序列化库,如Jackson、Gson、protobuf等,它们提供了更灵活的配置和更好的性能。 在实际项目中,理解并熟练掌握序列化和反序列化对于开发高效、安全的...
6. **IO流**:讲解输入/输出流的基本概念,包括字节流和字符流,以及缓冲区、对象序列化等相关知识。 7. **多线程**:介绍线程的概念,创建线程的方式(继承Thread类和实现Runnable接口),线程同步和通信机制(如...
Java实验项目A主要关注的是Java语言的基础学习,涵盖了Eclipse开发环境的使用、控制台输入输出、基本...完成这个实验将使学生具备基本的Java程序设计能力,为进一步学习面向对象编程、类库使用和复杂算法打下坚实基础。
Java提供了一系列类如`ObjectOutputStream`和`ObjectInputStream`来进行对象的序列化和反序列化。 5. **切换背景**:为了增加游戏趣味性,玩家可能可以更换游戏背景。这可能涉及到图像处理和资源管理,Java的`javax...
### UML对于Java程序员的重要性及应用 #### 一、引言 随着软件工程领域的不断发展,UML(统一建模语言)作为一种重要的可视化工具,在软件设计过程中...总之,这是一本值得每位Java程序员仔细研读并实践的经典之作。
7. **文件存储**:如果游戏支持保存和读取进度,那么还需要用到文件I/O功能,如序列化技术将棋盘状态写入文件。 8. **设计模式**:为了提高代码的可读性和可维护性,开发者可能应用了各种设计模式,如单例模式...
8. **持久化**:如果游戏支持保存和加载进度,那么还需要实现数据的序列化和反序列化,以便将棋局状态保存到文件并读取回来。 9. **多线程**:为了在计算复杂走法时不影响用户界面的响应性,可以使用Java的多线程...
这在处理插件系统、序列化、动态代理等方面非常有用。在代码集中,你可能会遇到使用反射进行类操作的实例。 8. **Java API的使用** Java提供了一套庞大的标准库,如Collections框架、日期时间API、IO流、网络编程...
5. **输入/输出**:讲解了I/O流的概念,包括字节流、字符流、缓冲流、对象序列化以及文件操作。 6. **网络编程**:介绍了套接字编程,包括客户端/服务器模型,以及如何使用Socket和ServerSocket进行网络通信。 7. ...
在“java-advanced-master”中,可能会有关于如何使用Class类、Constructor类、Method类以及Field类来实现动态代理、自定义序列化和反序列化、动态加载类等实例。 4. **设计模式**:设计模式是软件开发中的最佳实践...
综上所述,这个五子棋项目展示了Java编程语言在桌面应用开发中的能力,包括图形用户界面设计、文件操作、数据序列化以及游戏逻辑的实现。通过学习和理解这些知识点,开发者可以进一步提升自己的Java编程技能,尤其是...
- **深入Java**:从“Think in Java”入手,逐步掌握Java的核心知识,包括集合、序列化、网络编程、多线程等。 - **工具运用**:熟练使用开发工具如Eclipse或IntelliJ IDEA,并了解JDK文档的使用方法。 - **设计模式...
5. **输入/输出流**:讲解I/O流的概念,包括字节流、字符流、对象序列化,以及File类的使用。 6. **多线程**:Java2提供了对多线程的支持,包括Thread类和Runnable接口,以及同步机制(如synchronized关键字和wait/...
5. **IO流**:输入输出流的理解和使用,包括文件读写、缓冲流、对象序列化等,可能会出现在题目中。 6. **多线程**:Thread类和Runnable接口的使用,同步机制如synchronized关键字、wait/notify方法等,都是多线程...
这涉及到TCP/IP协议,数据的序列化和反序列化等。 4. **游戏逻辑**:五子棋的胜负判断和棋盘状态更新需要严谨的算法。例如,棋盘状态的表示(可能使用二维数组),以及判断是否有五子连珠的算法。 5. **错误处理**...
4. **Apache Avro和Protocol Buffers**:这些是数据序列化工具,常用于Hadoop和Spark项目,以提高数据交换效率。 5. **大数据项目实战**:实际操作中,需要考虑数据源接入、数据处理流程设计、性能优化、错误处理和...
源码中会有对文件读写、字符流、字节流、缓冲流、对象序列化等方面的示例。 8. **网络编程**:Java提供了丰富的Socket类用于网络通信,源码可能会包含客户端-服务器模型的简单实现,演示TCP和UDP的使用。 9. **...
### Java小实验知识点详解 #### 实验1:熟悉上机环境与基础编程 ...通过这一系列的Java小实验,初学者不仅能够巩固Java基础语法,还能逐步建立起面向对象的编程思维,为进一步学习高级Java技术打下坚实的基础。
这部分内容深入剖析了Java序列化的工作原理及其安全风险,并提供了一些最佳实践来避免这些问题的发生。 以上内容展示了《安全客第一期.pdf》中所涵盖的一些核心安全议题。从实际案例分析到理论探讨,这些内容不仅为...
9. JavaScript漏洞:了解Node.js安全,如常见漏洞和反序列化问题。 五、工具使用: 1. 虚拟机:VMware或VirtualBox,安装Kali Linux进行安全测试。 2. 抓包工具:Wireshark、Burp Suite等用于网络流量分析。 3. ...