What is tE' -“量 import declarations java. io DataOutputStream io. Fil 反射( reflec java. io. File otFoundikcetion spection), 是Java语言 java. io FileOutputStream java. io IOException 的 Class对象获 取类的全音 boolData. boolean 型(类的超类 和实现的捏 o s shor tData.short ta: byt nt 反射可用于a:m a doubleData: double (1)创建类 byteArrayData: byte[] 的结构信息 unsi gnedByteData: int (2)动态创 A testDataOutput FileOutputStream 在使用各种面向对象设计方法都不能实现设 计需求的情况下才使用反射!
What is the reflection? • 反射(reflection)又称为自省(introspection), 是Java语言提供的一种通过类的Class对象获 取类的全部成员和类所属的类型(类的超类 和实现的接口)信息的机制 • 反射可用于实现以下两种功能: (1) 创建类型浏览器,获取类型的结构信息 (2) 动态创建和操作对象 在使用各种面向对象设计方法都不能实现设 计需求的情况下才使用反射!
java. lang Class Class 在Java语言中,类 java. lang,Clas)于表示 类型的定义,也声明了与反射相关的各种方 法 任何类、接口、数组或基本数据类型都提供 了静态的类Clas的对象引用cass String class Cloneable class intlclass double class
java.lang.Class Class • 在Java语言中,类java.lang.Class用于表示 类型的定义,也声明了与反射相关的各种方 法 • 任何类、接口、数组或基本数据类型都提供 了静态的类Class的对象引用class String.class Cloneable.class int[].class double.class
inta={10,100,1000}; Class intArrayClass=a. getclasso inta={10,100,1000}; Class intArrayClass=a class; RUI Class jdbcDriverCls=Class forName(com. mysqljdbc Driver); (用尖b1ec甲的 getclass月 class at public class B{…} Class bClass-=A class. getClasseso 0;
Methods for Class Objects • 获取指定类型的Class对象是进行反射操作的 起点 • 可通过以下4种方法获取类型的Class对象: (1) 调用类Object中的getClass()方法 (2) 访问类型的静态域<类型>.class (3) 调用Class.forName(String className)方法 (4) 调用Class对象的getClasses()方法返回嵌套 类或接口的Class对象 int[] a={10,100,1000}; Class intArrayClass=a.getClass(); int[] a={10,100,1000}; Class intArrayClass=a.class; Class jdbcDriverCls=Class.forName(“com.mysql.jdbc.Driver”); class A{ public class B{……} …… } Class bClass=A.class.getClasses()[0];
public void show Kind( Class classobjt if(classObj. isInterfaceo) System. out. printIn("It is an interface type); else if(classobj. isArrayo) System. out. println(“ It is an array type”); else if(class Obj. isPrimitiveO) System. out. printIng(“ It is a primitive type”) else System. out. printIn(“ It is a class type”); show Kind(String class); show Kind (serializable class); show Kind(bytel class); show Kind(int class); It is a class type It is an interface type It is an array type It is a primitive type
Methods for Type Kind • 该类提供了以下方法用于判断Class对象的 类型: public boolean isInterface() public boolean isArray() public boolean isPrimitive() public void showKind(Class classObj){ if(classObj.isInterface()) System.out.println(“It is an interface type”); else if(classObj.isArray()) System.out.println(“It is an array type”); else if(classObj.isPrimitive()) System.out.println(“It is a primitive type”); else System.out.println(“It is a class type”); } showKind(String.class); showKind(Serializable.class); showKind(byte[].class); showKind(int.class); It is a class type It is an interface type It is an array type It is a primitive type
Methods for Type Hierarchy 类 Class声明了以下方法用于获取类的父类 和实现的接口信息 publie ClassI getInterfacesO publie Class getSuper Classe 类Cass声明了以下方法用于获取类的修饰 符信息 public int getModifiersO
Methods for Type Hierarchy • 类Class声明了以下方法用于获取类的父类 和实现的接口信息 public Class[] getInterfaces() public Class getSuperClass() • 类Class声明了以下方法用于获取类的修饰 符信息 public int getModifiers()