【编程实践】:java反射实现对象序列化

前言

今天设想了一种开发模式。。。
个人博客系统还在开发。。。
今天准备对反射技术做一个总结。。。
本文以对象序列化的过程对反射的应用举一个简单例子

什么是反射

Java的反射(reflection)是一种机制,是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

反射的功能

Ⅰ、在运行时判断任意一个对象所属的类
Ⅱ、在运行时构造任意一个类的对象
Ⅲ、在运行时判断任意一个类所具有的成员变量和方法
Ⅳ、在运行时调用任意一个对象的方法
Ⅴ、生成动态代理。

反射相关类

java反射的需要用到的类大多位于java.lang.reflect包里面,该包提供了获取类和对象信息的接口和类。

Class类

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

以下示例使用 Class 对象来显示对象的类名:

     void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
     }

还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如:

     System.out.println("The name of class Foo is: "+Foo.class.getName());

get系列方法

方法名 返回值 方法说明
getDeclaredClasses() Class<?>[] 返回 Class 对象的一个数组,这些对象反映声明为此 Class 对象所表示的类的成员的所有类和接口。
getDeclaredConstructor(Class<?>… parameterTypes) Constructor<T> 返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
getDeclaredConstructors() Constructor<?>[] 返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。
getDeclaredField(String name) Field 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
getDeclaredFields() Field[] 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
getDeclaredMethod(String name, Class<?>… parameterTypes) Method 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
getDeclaredMethods() Method[] 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

is系列方法

方法名 返回值 方法说明
isArray() boolean 判定此 Class 对象是否表示一个数组类。
isEnum() boolean 当且仅当该类声明为源代码中的枚举时返回 true。
isInstance(Object obj) boolean 判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。
isInterface() boolean 判定指定的 Class 对象是否表示一个接口类型
isPrimitive() boolean 判定指定的 Class 对象是否表示一个基本类型。

Field类

Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
Array 允许在执行 get 或 set 访问操作期间进行扩展转换,但如果将发生收缩转换,则抛出一个 IllegalArgumentException
Filed类主要是获取某个对象在该成员上的信息,并提供了获取基础数据类型的方法,这里不一一列举。

Method类

Method类主要是invoke方法的使用。

程序介绍

本程序采用反射方式实现对象的序列化,在web开发的过程中,经常需要操作基础表,而基础表的数据往往对应一个实体类的对象,如果把这个对象进行序列化,使其toString方法,返回一个插入基础表一条数据的sql语句,那么这个功能就可以被复用,形成一个组件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值