第十一讲 反射与序列化 面向对象技术的灵活应用 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 1 反射与序列化 ——面向对象技术的灵活应用 第十一讲
反射 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 2 反射
表示“类”的类 C|ass类提供了类数据类型的相关信息 一个 Class类的对象实际上表示的是一种 类型 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 3 表示“类”的类 Class类提供了类数据类型的相关信息 一个Class类的对象实际上表示的是一种 类型
获取CaSs类的方法 (1) Employee er ■■■■■ Class cl=e. getclasso; (2) Class c= Class forname(“ java.util. Date”) (3) T Class,如 Class c1=int class Class c2=Doublel]. class 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 4 获取Class类的方法 (1)Employee e; …… Class cl=e.getClass(); (2) Class c1=Class.forName(“java.util.Date”) (3)T.Class,如 Class c1=int.class Class c2=Double[].class
C|ass类实例 t classDemo java EN C: \PROGRA"1\XINOXS"1\JCREA..-ox 名称:java.lang. String 是否为接口: false 是否为基本类型: false 否为数组对象: false 父类名称:Java.1ang. Object Press any key to continue 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 5 Class类实例: ClassDemo.java
C|aSS类实例 t ClassDemo2 java CN) C: \PROGRA"1\XINOXS"1\CREAT"I\GE..-ox boo lean lass [I lass [D Press any key to continue 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 6 Class类实例 ClassDemo2.java
C|aSS类实例 ◆使用 Class. forname获取类的信息: ForName Demo.java cC: \PROGRA 1\XINOXS 1\JCREAT-.- 名称: java.ut i1. Scanner 是否为接口: false 是否为基本类型: false 是否为数组:fa1se java langObject Press any key to continue 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 7 Class类实例 使用Class.forName获取类的信息: ForNameDemo.java
获取类所在的包 t classInfo Demo. java 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 8 获取类所在的包 ClassInfoDemo.java
判断对象类型 if (e. getclasso getName(==Employee") ■■■■■ 或 if(e. getclasso==Employee Class) ■■■■■■ 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 9 判断对象类型 if (e.getClass().getName()==“Employee”) …… 或 if(e.getClass()==Employee.Class) ……
使用Cass类创建新对象 ◆代码: 使用cass类的 newInstance()方法 实例一,调用无参构造函数: NewInstanceDemo java 实例二调用有参构造函数 NewInstanceDemo2 java 北京理工大学计算机系(共28页)
北京理工大学计算机系(共28页) 10 使用Class类创建新对象 代码: 使用Class类的newInstance()方法 实例一,调用无参构造函数: NewInstanceDemo.java 实例二,调用有参构造函数 NewInstanceDemo2.java