Java 序列化与反射

简介: Java 序列化与反射

一,对象序列化概述

对象记录自己状态的过程,通常被称之为对象的序列化(Serialization)

也可以理解为把对象的状态写入一个字节流的过程 。

对象逆序列化(Deserializing) :从字节流中读取对象的过程


反射就是为了在程序的运行过程中动态的获取类的方法和属性, 优点就是可以实现动态创建对象和编译,体现出很大的灵活性,缺点是对性能有影响。


序列化是将对象状态转换为容易传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

二,支持序列化的接口和类

Serializable接口

只有一个实现Serializable接口的对象可以被序列化工具存储和恢复。

Serializable接口没有定义任何成员。它只用来表示一个类可以被序列化。如果一个类可以序列化,它的所有子类都可以序列化。

Externalizable接口

可以让需要序列化的类实现Serializable接口的子接口Externalizable

Externalizable接口表示实现该接口的类在序列化中由该类本身来控制信息的写出和读入。

ObjectOutputStream类

ObjectOutputStream类继承OutputStre am 类和实现ObjectOutput接口。负责向流写入对象。

构造方法:

主要方法:

writeObject() 向特定的文件或网络输出对象

transient

transient修饰的属性不进行序列化的操作,起到一定消息屏蔽的效果

被transient修饰的属性可以正确的创建,但被系统赋为默认值。即int类型为0String类型为null

三,应用序列化编程

对象写入流的条件

该类必须被声明为public

该类必须实现Serializable接口

如果该类有直接或者间接的不可序列化的基类,那么该基类必须有一个默认的构造器。该派生类需要负责将其基类中的数据写入流中

四,反射

Java程序中对象的两种类型

编译时类型

运行时类型

编译时类型与运行时类型不同如何处理?

编译时和运行时都知道类型信息,则用强制类型转换。

编译时无法预知对象和类属于哪些类,程序只能依靠运行时信息来发现该对象和类的信息,这就必须用反射。

获得Class对象

使用Class类的forName(String className)静态方法

调用某个类的class属性来获取该类对应的Class对象(常用方法)

代码更安全

程序性能更好

调用某个对象的getClass()方法。

Class中获取信息

获取Class对应类包含的构造器

获取Class对应类所包含的方法

获取Class对应类所包含的Field

获取Class对应类的修饰符、所在包、类名等

使用反射生成并操作对象

创建对象

使用Class对象的newInstance()方法来创建Class对象对应类的实例

先使用Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建Class对象对应类的实例

调用方法

访问属性值

目录
相关文章
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
221 1
|
5月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
216 0
|
6月前
|
JSON Java 数据库连接
|
12月前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
162 5
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
301 5
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
Java
Java的反射
Java的反射。
138 2
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
212 3