java的反射机制Reflection(重点、难点)

本文详细介绍了Java反射机制Reflection的功能和实现,包括通过Class类获取类信息、使用Field类操作成员变量、Method类调用方法、Constructor类创建对象以及Array类处理数组。Java反射机制使得在运行时动态获取类信息和调用方法成为可能,赋予了Java一定的动态语言特性。文中还通过示例代码展示了如何使用Reflection进行实际操作,包括访问私有成员和动态调用方法。
摘要由CSDN通过智能技术生成

一、反射机制(Reflection)概述

在java运行时环境中,动态获取类的信息以及动态调用对象的方法都是基于java的反射机制来完成的。

注意点:是在java的运行过程中,不是在编译过程中。讲到Reflection就要联想到运行时环境


二、Reflection的功能

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

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

3.在运行时判断任意一个类所具有的成员变量;

4.在运行时调用任意一个对象的方法。

java的这个机制允许在运行时透过Reflection APIs取得任何一个已知名称(可以是自己定义的class、如Person类,或者已知的“java.lang.String”等已知类)的class的内部信息,包括此class的修饰符、父类、实现的接口、属性、方法(包括构造方法)等所有信息,也可以在运行时修改属性内容或调用方法


java其实是一门静态语言,但Reflection是java被视为动态语言(准确来讲,为准动态)的一个关键性质。对于动态语言,允许在程序运行时改变程序结构或变量类型,例如可以访问private类型的属性和方法就是利用的这个原理。

举一个动态语言例子,为特定类型的属性赋值一个其他类型:

int a = 1;

a = "lpp";

a = true;

这个例子说明,程序在运行过程中改变了属性a的数据类型,这在动态语言中是可行的。虽然java是一门静态语言,但利用其反射机制,也能实现如上代码。


三、java中实现Reflection的类

在java.lang和java.lang.reflect包中,存在几个实现java反射机制的类:

1.Class类:代表一个类。每个类和接口都有一个与之关联的Class对象,无论生成某个类的多少个对象,这些对象都对应此类的同一个Class类;例如生产类Integer的多个对象,这些对象都对应于Integer所对应的Class对象。

java.lang
类 Class<T>

java.lang.Object
  java.lang.Class<T>

2.Field类:代表类的成员变量(属性)。

java.lang.reflect
类 Field

java.lang.Object
  java.lang.reflect.AccessibleObject
      java.lang.reflect.Field

3.Method类:代表类的方法。

java.lang.reflect
类 Method

java.lang.Object
  java.lang.reflect.AccessibleObject
      java.lang.reflect.Method

4.Constructor类:代表类的构造方法。

java.lang.reflect
类 Constructor<T>

java.lang.Object
  java.lang.reflect.AccessibleObject
      java.lang.reflect.Constructor<T>

5.Array类:提供了一个动态创建数组,以及访问数组元素的静态方法。专门用于在反射机制中对数组的操作。

java.lang.reflect
类 Array

java.lang.Object
  java.lang.reflect.Array

四、实现Reflection的类的使用

1.Reflection中Class类的使用方法

(1)使用反射机制时,首先应得到需要操作的对象所对应的Class类。利用Class类的forName方法得到所操作类的Class对象:

static Class<?> forName(String className)
          返回与带有给定字符串名的类或接口相关联的 Class 对象。

(2)通过Class类的getMethods()方法得到一个包含某些Method对象的数组,这些Method对象就是Class对象所对应的类或接口所有public方法(包括继承的父类中的方法、不包括构造方法)。

Method[] getMethods()<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值