Java反射机制详解文档格式.docx

上传人:b****0 文档编号:13450278 上传时间:2022-10-10 格式:DOCX 页数:15 大小:52.90KB
下载 相关 举报
Java反射机制详解文档格式.docx_第1页
第1页 / 共15页
Java反射机制详解文档格式.docx_第2页
第2页 / 共15页
Java反射机制详解文档格式.docx_第3页
第3页 / 共15页
Java反射机制详解文档格式.docx_第4页
第4页 / 共15页
Java反射机制详解文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Java反射机制详解文档格式.docx

《Java反射机制详解文档格式.docx》由会员分享,可在线阅读,更多相关《Java反射机制详解文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

Java反射机制详解文档格式.docx

Class文件结构

JVM加载类对象,对反射的支持

9.JAVA反射的应用

一、什么是JAVA的反射机制

Java反射是Java被视为动态(或准动态)语言的一个关键性质。

这个机制允许程序在运行时透过ReflectionAPIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public,static等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。

Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的classes。

换言之,Java可以加载一个运行时才得知名称的class,获得其完整结构。

二、JDK中提供的ReflectionAPI

Java反射相关的API在包java.lang.reflect中,JDK1.6.0的reflect包如下图:

Member接口

该接口可以获取有关类成员(域或者方法)后者构造函数的信息。

AccessibleObject类

该类是域(field)对象、方法(method)对象、构造函数(constructor)对象的基础类。

它提供了将反射的对象标记为在使用时取消默认Java语言访问控制检查的能力。

Array类

该类提供动态地生成和访问JAVA数组的方法。

Constructor类

提供一个类的构造函数的信息以及访问类的构造函数的接口。

Field类

提供一个类的域的信息以及访问类的域的接口。

Method类

提供一个类的方法的信息以及访问类的方法的接口。

Modifier类

提供了static方法和常量,对类和成员访问修饰符进行解码。

Proxy类

提供动态地生成代理类和类实例的静态方法。

三、JAVA反射机制提供了什么功能

Java反射机制提供如下功能:

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判段任意一个类所具有的成员变量和方法

在运行时调用任一个对象的方法

在运行时创建新类对象

在使用Java的反射功能时,基本首先都要获取类的Class对象,再通过Class对象获取其他的对象。

这里首先定义用于测试的类:

[java] 

viewplain 

copy

print?

1.class 

Type{ 

2. 

public 

int 

pubIntField;

3. 

String 

pubStringField;

4. 

private 

prvIntField;

5. 

6. 

Type(){ 

7. 

Log("

Default 

Constructor"

);

8. 

9. 

10. 

Type(int 

arg1, 

arg2){ 

11. 

pubIntField 

arg1;

12. 

pubStringField 

arg2;

13. 

14. 

Constructor 

with 

parameters"

15. 

16. 

17. 

void 

setIntField(int 

val) 

18. 

this.prvIntField 

val;

19. 

20. 

getIntField() 

21. 

return 

22. 

23. 

24. 

Log(String 

msg){ 

25. 

System.out.println("

Type:

"

msg);

26. 

27.} 

28. 

29.class 

ExtendType 

extends 

30. 

pubIntExtendField;

31. 

pubStringExtendField;

32. 

prvIntExtendField;

33. 

34. 

ExtendType(){ 

35. 

36. 

37. 

38. 

ExtendType(int 

39. 

pubIntExtendField 

40. 

pubStringExtendField 

41. 

42. 

43. 

44. 

45. 

setIntExtendField(int 

field7) 

46. 

this.prvIntExtendField 

field7;

47. 

48. 

getIntExtendField() 

49. 

50. 

51. 

52. 

53. 

ExtendType:

54. 

55.} 

1、获取类的Class对象

Class类的实例表示正在运行的Java应用程序中的类和接口。

获取类的Class对象有多种方式:

调用getClass

Booleanvar1=true;

Class<

?

>

classType2=var1.getClass();

System.out.println(classType2);

输出:

classjava.lang.Boolean

运用.class语法

classType4=Boolean.class;

System.out.println(classType4);

运用staticmethodClass.forName()

classType5=Class.forName("

java.lang.Boolean"

System.out.println(classType5);

运用primitivewrapperclasses的TYPE语法

这里返回的是原生类型,和Boolean.class返回的不同

classType3=Boolean.TYPE;

System.out.println(classType3);

boolean

2、获取类的Fields

可以通过反射机制得到某个类的某个属性,然后改变对应于这个类的某个实例的该属性值。

JAVA的Class<

类提供了几个方法获取类的属性。

FieldgetField(String 

name)

返回一个Field对象,它反映此Class对象所表示的类或接口的指定公共成员字段

Field[]getFields()

返回一个包含某些Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段

FieldgetDeclaredField(Stringname)

返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段

Field[]getDeclaredFields()

返回Field对象的一个数组,这些对象反映此Class对象所表示的类或接口所声明的所有字段

1.Class<

classType 

ExtendType.class;

3.// 

使用getFields获取属性 

4.Field[] 

fields 

classType.getFields();

5.for 

(Field 

:

fields) 

6.{ 

System.out.println(f);

8.} 

10.System.out.println();

12.// 

使用getDeclaredFields获取属性 

13.fields 

classType.getDeclaredFields();

14.for 

15.{ 

17.} 

publicintcom.quincy.ExtendType.pubIntExtendField

publicjava.lang.Stringcom.quincy.ExtendType.pubStringExtendField

publicintcom.quincy.Type.pubIntField

publicjava.lang.Stringcom.quincy.Type.pubStringField

privateintcom.quincy.ExtendType.prvIntExtendField

可见getFields和ge

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1