专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java:反射功能和API简介、4个反射方法的代码实战、反射的优劣势

temp10 2024-09-07 00:04:51 java教程 18 ℃ 0 评论

1. Java反射的概念和提供的功能

(1)概念

在Java运行时的环境中,动态获取类的信息以及动态调用对象的方法的功能叫反射机制(Reflection)

Java:反射功能和API简介、4个反射方法的代码实战、反射的优劣势

(2)反射提供的功能

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

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

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

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

2. Java反射实现层面提供的API

(1)Java反射提供的类所在的包是:

java.lang.reflect

(2) 具体的类包括如下:

Class类:代表一个类(注意:Class类位于java.lang包下);

Field类:代表类的成员变量;

Method类:代表类的方法;

Constructor类:代表类的构造方法;

Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

3. 三种方法获取Class对象

(1)方法一:Class类提供的静态方法:forName(String className),其中参数className表示包括包路径的完整类名

(2)方法二:利用类名.class这个方式

(3)方法三:利用Object类提供的方法:getClass()

(4)以上三种方法的代码实例如下:

4. 获取成员变量对应的Field对象

Class类提供的获取类的成员变量对应的Field对象的方法如下:

1)Field getDeclaredField(String name):根据传入的变量名称返回此Class对象所表示的类或接口中声明的变量对应的Field对象。

2)Field[] getDeclaredFields():返回一个Field类型的数组,包含此Class对象所表示的类或接口中声明的所有变量的Field对象。

3)Field getField(String name):根据传入的变量名返回一个Field对象,注意与getDeclaredField(String name)不同的是,此方法返回的是public变量对应的Field对象。

4)Field[] getFields():返回一个Field类型的数组,注意与Field[] getDeclaredFields()方法不同的是,此方法返回的是所有public变量对应的Field对象。

代码实例如下:

输出结果是:

------获取Boolean类中声明的所有成员变量的Field对象的数组--------

public static final java.lang.Boolean java.lang.Boolean.TRUE

public static final java.lang.Boolean java.lang.Boolean.FALSE

public static final java.lang.Class java.lang.Boolean.TYPE

private final boolean java.lang.Boolean.value

private static final long java.lang.Boolean.serialVersionUID

-------获得Boolean类中声明的public成员变量的Field对象的数组---------

public static final java.lang.Boolean java.lang.Boolean.TRUE

public static final java.lang.Boolean java.lang.Boolean.FALSE

public static final java.lang.Class java.lang.Boolean.TYPE

5. 利用反射获取类对应的Method对象

Class类提供了以下方法来获取类中的方法对应的Method对象:

1)Method getDeclaredMethod(String name, Class<?>... parameterTypes):返回一个Method对象,参数name表示方法名,可变参数parameterTypes是一个Class对象的数组,代表方法的参数的Class类型;

2)Method[] getDeclaredMethods():返回Method对象的一个数组,这些对象反映此Class对象所表示的类或接口声明的所有方法,包括公共、保护、默认访问和私有方法,但不包括继承的方法;

3)Method getMethod(String name, Class<?>... parameterTypes):返回一个Method对象,注意和此Method对象对应的方法是公共(public)方法;

4)Method[] getMethods():返回一个Method数组,这些对象反映此Class对象所表示的类或接口中声明的公共(public)方法(也包括父类或父接口中声明的public方法)。

代码实例如下:

6. 利用反射机制调用自定义的对象的方法

Java反射机制可以在运行时动态调用类中的方法。具体步骤包括:

1)首先要创建一个对象,通过类的Class对象来创建它所代表的类的实例

2)通过Class对象我们还能获得类中声明的方法的Method对象

3)Method类提供了Invoke方法来调用此Method对象所表示的方法

代码实例如下:

输出结果是:

计算得到的结果是: 3.3

打印出来的信息是:additionnal info: beautiful

7. 反射的优劣势

反射机制是一种程序自我分析的能力。用于获取一个类的类变量,构造函数,方法,修饰符。但是它的优劣势如下:

优点:运行期类型的判断,动态类加载,动态代理使用反射。

缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。

此头条号每天都会分享非常实用的技术文章和笔试题讲解,欢迎大家关注此头条号!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表