成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Reflection Mechanism Java 反射机制

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()

Methods for Type Hierarchy 类 Class声明了以下方法用于获取数组元素 的类型信息,非数组类型则返回mull public Class get ComponentTypeO 类 Class声明了以下方法用于获取嵌套类所 在的外层类信息 publie Class getDeclaring Classe
Methods for Type Hierarchy • 类Class声明了以下方法用于获取数组元素 的类型信息,非数组类型则返回null public Class getComponentType() • 类Class声明了以下方法用于获取嵌套类所 在的外层类信息 public Class getDeclaringClass()

public abstract class Outer( public static final class Inner i public class Outer Ext extends Outer( 天 ModIfIer明种衣国 Class c0=OuterExt. class. getSuper Class; int m= cO. getModifiers(; boolean isAbstract= ModifierisAbstract(m); true boolean isPublic= ModifierisPublic(m); true Class cl=c0.get Classeso10l; boolean is Final= Modifier is Final(cl. getModifiersO); true
java.lang.reflect.Modifier Class • java.lang.reflect包定义了各种与反射相关的 类和接口 • 类Modifier声明了各种表示修饰符类型的常 量和判断方法: static final int FINAL static final int PUBLIC static boolean isProtected(int mod) static boolean isVolatile(int mod) public abstract class Outer{ public static final class Inner {……} …… } public class OuterExt extends Outer{ …… } Class c0 = OuterExt.class.getSuperClass(); int m = c0.getModifiers(); boolean isAbstract = Modifier.isAbstract(m); boolean isPublic = Modifier.isPublic(m); Class c1 = c0.getClasses()[0]; boolean isFinal = Modifier.isFinal(c1.getModifiers()); true true true

intl a=new int; A Stringll b=new String 101 boolean c=new boolean 5: Boolean d=new Booleans: System. out. printIn(a. getClasso getNameo); System. out. printIn(b.getClassO-getName0); System. out. printIn(c. getClasso. getNameO) System. out. printIn(d. getclasso-getNameo); LLjavalang String; LLjava lang Boolean;
Array Class Name • 数组的类名由一个或多个左方括号“[”和表示数组 元素类型的字符构成,左方括号“[”的个数表示数 组的维数 B byte C char F float S short Z boolean D double I int L; 类或接口 J long • 类Class声明了以下方法用于获取类型名 public String getName() int[][] a=new int[5][]; String[] b=new String[10]; boolean[] c=new boolean[5]; Boolean[] d=new Boolean[5]; System.out.println(a.getClass().getName()); System.out.println(b.getClass().getName()); System.out.println(c.getClass().getName()); System.out.println(d.getClass().getName()); [[I [Ljava.lang.String; [Z [Ljava.lang.Boolean;

Nested Type Name package test; class Af public class B{…} Class bClass-A classget Classeso10l; System. out. printIn(bClass.getNameo) test.ASB
Nested Type Name • 嵌套类型中成员类型的完全限定名由所属外 层类型的完全限定名和成员类型名构成,中 间用字符“$”分隔 $ package test; class A{ public class B{……} …… } Class bClass=A.class.getClasses()[0]; System.out.println(bClass.getName()); test.A$B

Classes for Class Members Member Constructor Field Method
Classes for Class Members • java.lang.reflect包中定义了用于表示类或接 口的各种成员的类和接口 java.lang.reflect.Member(接口) java.lang.reflect.Constructor(类) java.lang.reflect.Field(类) java.lang.reflect.Method(类) Member Constructor Field Method
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)CollectionFramework.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Cloning Objects.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 13 I/O Package.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 12 Threads.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 11 Nested Classes and Interfaces.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 10 Interfaces.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 09 Extending Classes.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 08 Basic Grammar(Part 3).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 07 Basic Grammar(Part 2).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 05 Classes and Objects(Part 2).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 04 Classes and Objects(Part 1).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 03 JVM Architecture.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 02 Programming Basic.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 01 Java语言的发展历史(李凡).ppt
- 《文秘与办公应用全能培训教程》习题答案.doc
- 《文秘与办公应用全能培训教程》单元18 办公自动化系统维护.ppt
- 《文秘与办公应用全能培训教程》单元17 互联网与现代办公.ppt
- 《文秘与办公应用全能培训教程》单元16 局域网办公.ppt
- 《文秘与办公应用全能培训教程》单元15 Office的其他组件和Office XP的新特性.ppt
- 《文秘与办公应用全能培训教程》单元14 PowerPoint 2000.ppt
- 《C++程序设计开发》第1章 C++程序设计入门.ppt
- 《C++程序设计开发》第2章 算法设计与程序结构.ppt
- 《C++程序设计开发》第3章 数据结构设计.ppt
- 《C++程序设计开发》第4章 重载与模板.ppt
- 《C++程序设计开发》第5章 程序的类层次结构.ppt
- 《C++程序设计开发》第6章 IO流类库.ppt
- 《C++程序设计开发》第7章 Visual C++程序设计.ppt
- 《计算机操作系统》管程monitor的特点.ppt
- 《计算机操作系统》第一章 计算机系统概述.ppt
- 《计算机操作系统》第十章 设备管理.ppt
- 《计算机操作系统》第十一章 文件管理.ppt
- 《计算机操作系统》第二章 操作系统概述.ppt
- 《计算机操作系统》第三章 进程描述和控制.ppt
- 《计算机操作系统》第五章 并发性:互斥和同步.ppt
- 《计算机操作系统》第六章 死锁和饿死.ppt
- 《计算机操作系统》第七章 存储器管理.ppt
- 《计算机操作系统》第八章 虚拟存储器.ppt
- 《计算机操作系统》第九章 单处理器调度(9-1)调度的类型.ppt
- 《计算机操作系统》第九章 单处理器调度(9-2)调度的类型.ppt
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第1章 微型计算机概述(李芷).pps