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对象对应类的实例

调用方法

访问属性值

目录
相关文章
|
6天前
|
Java 程序员 测试技术
解析Java中的反射机制及其应用场景
解析Java中的反射机制及其应用场景
|
8天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
10天前
|
缓存 Java 测试技术
Java中的反射机制及其应用场景
Java中的反射机制及其应用场景
|
10天前
|
Java
Java中的反射与动态代理机制详解
Java中的反射与动态代理机制详解
|
10天前
|
存储 安全 Java
Java中的反射机制及其应用场景详解
Java中的反射机制及其应用场景详解
|
4天前
|
Java API
Java注解与反射机制
Java注解与反射概述: - 注解用于元数据,包括元注解`@Target`, `@Retention`, `@Documented`, `@Inherited`。 - 自定义注解用于自定义行为标记,参考[链接]例化后通过`getClass()`获取类信息。 - 主要API涉及类的多种获取方式,如`对象.getClass()`, `类名.class`, `Class.forName()`和内置类型`TYPE`。 - 应用场景包括动态创建对象,获取泛型和注解信息以及分析运行时结构。
|
5天前
|
Java 程序员 测试技术
解析Java中的反射机制及其应用场景
解析Java中的反射机制及其应用场景
|
5天前
|
缓存 Java 测试技术
Java中的反射机制及其应用场景
Java中的反射机制及其应用场景
|
8天前
|
JSON NoSQL Java
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
|
10天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解